gpt4 book ai didi

python - pandas - 与相同类别的列连接变成对象

转载 作者:太空宇宙 更新时间:2023-11-03 10:53:30 25 4
gpt4 key购买 nike

我想通过首先将缺失的类别添加到每一列来连接两个具有类别类型列的数据框。

df = pd.DataFrame({"a": pd.Categorical(["foo", "foo", "bar"]), "b": [1, 2, 1]})
df2 = pd.DataFrame({"a": pd.Categorical(["baz"]), "b": [1]})

df["a"] = df["a"].cat.add_categories("baz")
df2["a"] = df2["a"].cat.add_categories(["foo", "bar"])

理论上,"a" 列的类别相同:

In [33]: df.a.cat.categories
Out[33]: Index(['bar', 'foo', 'baz'], dtype='object')

In [34]: df2.a.cat.categories
Out[34]: Index(['baz', 'foo', 'bar'], dtype='object')

但是,当连接两个数据帧时,我得到一个 object 类型的 "a" 列:

In [35]: pd.concat([df, df2]).info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 4 entries, 0 to 0
Data columns (total 2 columns):
a 4 non-null object
b 4 non-null int64
dtypes: int64(1), object(1)
memory usage: 96.0+ bytes

documentation它说当类别相同时,它应该产生一个 category 类型的列。即使类别无序,类别的顺序是否重要?我正在使用 pandas-0.20.3

最佳答案

是的。通过使用 reorder_categories,您可以更改类别的顺序,即使类别本身是无序的。

df2["a"] = df2.a.cat.reorder_categories(df.a.cat.categories)

In [43]: pd.concat([df, df2]).info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 4 entries, 0 to 0
Data columns (total 2 columns):
a 4 non-null category
b 4 non-null int64
dtypes: category(1), int64(1)
memory usage: 172.0 bytes

关于python - pandas - 与相同类别的列连接变成对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45635539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com