gpt4 book ai didi

python - 在数据帧连接时保留分类数据类型

转载 作者:太空狗 更新时间:2023-10-30 00:53:34 25 4
gpt4 key购买 nike

我有两个具有相同列名和数据类型的数据框,类似于以下内容:

A             object
B category
C category

每个数据框中的类别都不相同。

正常连接时,pandas 输出:

A             object
B object
C object

根据the documentation,这是预期的行为.

但是,我希望保留分类并希望合并类别,因此我在数据框中的列中尝试了 union_categoricals,它们都是分类的。 cdfdf 是我的两个数据帧。

for column in df:
if df[column].dtype.name == "category" and cdf[column].dtype.name == "category":
print (column)
union_categoricals([cdf[column], df[column]], ignore_order=True)

cdf = pd.concat([cdf,df])

这仍然没有为我提供分类输出。

最佳答案

我不认为这在文档中是完全显而易见的,但您可以执行如下操作。下面是一些示例数据:

df1=pd.DataFrame({'x':pd.Categorical(['dog','cat'])})
df2=pd.DataFrame({'x':pd.Categorical(['cat','rat'])})

使用 union_categoricals1 在数据帧中获得一致的类别。如果您需要说服自己这有效,请尝试 df.x.cat.codes

from pandas.api.types import union_categoricals

uc = union_categoricals([df1.x,df2.x])
df1.x = pd.Categorical( df1.x, categories=uc.categories )
df2.x = pd.Categorical( df2.x, categories=uc.categories )

连接并验证数据类型是分类的。

df3 = pd.concat([df1,df2])

df3.x.dtypes
category

正如@C8H10N4O2 所建议的,您也可以在连接后将对象强制转换回分类。老实说,对于较小的数据集,我认为这是最好的方法,因为它更简单。但是对于更大的数据帧,使用 union_categoricals 应该更有效地利用内存。

关于python - 在数据帧连接时保留分类数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45639350/

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