我有两个数据帧,我想比较它们,然后并排显示差异。我一直在使用this question中已接受的解决方案,但现在我遇到ne_stacked = (current_df != new_df).stack()
错误。
这曾经很好用,但我现在得到的错误是The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
。在查看所有这些选项的文档之后,我不确定如何实现它们并在我的代码中保留相同的功能。
如何更换ne_stacked = (current_df != new_df).stack()
以便我不会出现歧义错误?
修改
要求的基本代码示例:
d = {'a':[1,2,3],'b':[1,2,3],'c':[1,2,3]}
d2 = {'a':[4,2,3],'b':[1,4,3],'c':[1,2,4]}
df1 = pd.DataFrame(d)
df2 = pd.DataFrame(d2)
print (df1 != df2) //returns true when value in df1 is not equal to df2
a b c
0 True False False
1 False True False
2 False False True
因此!=
表达式适用于这个简单的数据帧,但不是我正在使用的更复杂的数据帧(下图)。
df1 = {'CORE': [{'satellite': '2B',
'windowEnd': '2015-218 04:00:00',
'windowStart': '2015-217 20:00:00'}],
'DURATION': [500.0],
'PRIORITY': [5],
'RATE': [u'HIGH_RATE'],
'STATUS': [u'ACTIVE'],
'TASK_ID': [1],
'TYPE': [u'NOMINAL'],
'WINDOW_END': ['2015-218 04:00:00'],
'WINDOW_START': ['2015-217 20:00:00']}
df2 = {'CORE': [{'satellite': '2B',
'windowEnd': '2015-220 04:00:00',
'windowStart': '2015-219 20:00:00'}],
'DURATION': [500.0],
'PRIORITY': [5],
'RATE': [u'HIGH_RATE'],
'STATUS': [u'ACTIVE'],
'TASK_ID': [2],
'TYPE': [u'NOMINAL'],
'WINDOW_END': ['2015-220 04:00:00'],
'WINDOW_START': ['2015-219 20:00:00']}
答案 0 :(得分:0)
我正在使用pandas版本'0.16.2'
,当我尝试评估df1 != df2
时,我看不到任何错误。
请看下面的代码:
import pandas as pd
d1 = {'CORE': [{'satellite': '2B',
'windowEnd': '2015-218 04:00:00',
'windowStart': '2015-217 20:00:00'}],
'DURATION': [500.0],
'PRIORITY': [5],
'RATE': [u'HIGH_RATE'],
'STATUS': [u'ACTIVE'],
'TASK_ID': [1],
'TYPE': [u'NOMINAL'],
'WINDOW_END': ['2015-218 04:00:00'],
'WINDOW_START': ['2015-217 20:00:00']}
d2 = {'CORE': [{'satellite': '2B',
'windowEnd': '2015-220 04:00:00',
'windowStart': '2015-219 20:00:00'}],
'DURATION': [500.0],
'PRIORITY': [5],
'RATE': [u'HIGH_RATE'],
'STATUS': [u'ACTIVE'],
'TASK_ID': [2],
'TYPE': [u'NOMINAL'],
'WINDOW_END': ['2015-220 04:00:00'],
'WINDOW_START': ['2015-219 20:00:00']}
df1 = pd.DataFrame(d1)
df2 = pd.DataFrame(d2)
print (df1 != df2)
# It was printed:
# CORE DURATION PRIORITY RATE STATUS TASK_ID TYPE WINDOW_END WINDOW_START
# 0 True False False False False True False True True
您也可以尝试使用.any()
:
print (df1 != df2).any(axis=0)
# It was printed:
# CORE True
# DURATION False
# PRIORITY False
# RATE False
# STATUS False
# TASK_ID True
# TYPE False
# WINDOW_END True
# WINDOW_START True
# dtype: bool
注意.any()
,因为它会在整个行/列中查找任何True
值。我不知道你是否需要那个。