【发布时间】:2014-11-27 06:29:03
【问题描述】:
我试图了解 pandas 是否支持在分类数据列上合并 DataFrame(即 dtype="category")。
我在 R 中完成大部分数据工作,但我正在尝试在 Python/pandas 中完成更多工作。在 R 中,合并因子(类似于分类 dtype)会导致类型强制,通常是字符。这允许一个数据框将一个副变量(连接列)指定为一个因子(分类),而另一个数据框的副变量是一个字符串。在合并/加入之前,熊猫是否会执行类似的分类数据强制转换为字符串?我应该期望分类合并是健壮的吗?在哪里可以找到关于 pandas 中(自动)类型强制的文档?
简单示例:
+++ 测试分类向量与非分类/非标量向量是否相等是错误的:
In [52]:
import pandas as pd
a = pd.Series(['a','b','c'],dtype="category")
b = pd.Series(['a','b','c'],dtype="object")
c = pd.Series(['a','b','cc'],dtype="object")
In [54]:
a==b
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
...
TypeError: Cannot compare a Categorical for op <built-in function eq> with type <class 'numpy.ndarray'>. If you want to compare values, use 'series <op> np.asarray(cat)'.
+++ 但是在不同类型的列上合并一个 DataFrame——一个分类,一个字符串——不会引发错误(至少在这个简单的情况下)。必须发生某种类型的强制:
In [59]:
A = pd.DataFrame({'A':a,'B':[1,2,3]})
B = pd.DataFrame({'A':b,'C':[4,5,6]})
print(A.merge(B,on='A'))
A B C
0 a 1 4
1 b 2 5
2 c 3 6
【问题讨论】: