【发布时间】:2018-12-06 14:59:58
【问题描述】:
df = df1.loc[df1['CUST_ACCT_KEY'] != df2['CUST_ACCT_KEY']]
当我执行上述命令时,出现以下错误:
ValueError: 只能比较标签相同的 Series 对象
我做错了什么?*
两列的dtypes都是int64。
【问题讨论】:
-
df1 和 df1 的索引在执行操作前都被重置
df = df1.loc[df1['CUST_ACCT_KEY'] != df2['CUST_ACCT_KEY']]
当我执行上述命令时,出现以下错误:
ValueError: 只能比较标签相同的 Series 对象
我做错了什么?*
两列的dtypes都是int64。
【问题讨论】:
Pandas 几乎所有的操作都使用内在数据对齐,这意味着它使用索引来比较和执行操作。
您可以通过使用.values 将其中一个系列转换为numpy 数组来避免此错误:
df = df1.loc[df1['CUST_ACCT_KEY'] != df2['CUST_ACCT_KEY']].values
但是,您是在没有索引对齐的情况下逐行比较。
MCVE:
df1 = pd.DataFrame(np.arange(1,10), index=np.arange(1,10),columns=['A'])
df2 = pd.DataFrame(np.arange(11,20), index=np.arange(11,20),columns=['B'])
df1['A'] != df2['B']
输出:
ValueError: Can only compare identically-labeled Series objects
更改为 numpy 数组:
df1['A'] != df2['B'].values
输出:
1 True
2 True
3 True
4 True
5 True
6 True
7 True
8 True
9 True
Name: A, dtype: bool
【讨论】: