使用==运算符进行python DataFrame比较

时间:2016-10-04 07:51:00

标签: python dataframe comparison

我有两个结构相同且行数相同的python数据帧 当我对他们执行“==”操作时,他们会给出错误的答案

DF1:

      0     61561899
      1     56598947
      2     52231204
      3     10069030
      4     19900179
      5     52892001
      6     50015534
      7     10071207
      8     55455545
      9     10075649
      10    52050196
 Name: spn, dtype: object

DF2:

  0     61561899
  1     56598947
  2     52231204
  3     10069030
  4     19900179
  5     52892001
  6     50015534
  7     10071207
  8     55455545
  9     10075649
  10    52050196
  Name: spn, dtype: object

print df1 == df2
上面的python语句给出了以下输出:

  0     False
  1     False
  2     False
  3     False
  4     False
  5     False
  6     False
  7     False
  8     False
  9     False
  10    False
  Name: spn, dtype: bool

我不知道我错过了什么。我期待一切都是真的。

3 个答案:

答案 0 :(得分:2)

您还可以使用equals比较两个数据帧。访问http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.equals.html

df1 = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'f']})
df2 = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'f']})
df1.equals(df2) 
output: 
df1.equals(df2)
Out[70]: True

如果两个数据帧相等,它将为您提供True布尔值

另外,你可以使用isin。它返回数据帧的布尔值。 例如:

df1 = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'f']})
df2 = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'f']})
df1.isin(df2)
output: 
df1.isin(df2)
Out[68]: 
      A     B
0  True  True
1  True  True
2  True  True

访问http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.isin.html

答案 1 :(得分:1)

尝试转换为str,然后比较:

df1.spn.astype(str) == df2.spn.astype(str)

或者可能只需要比较列:

df1.spn == df2.spn

答案 2 :(得分:0)

由于比较结果为True值,因此希望查看您的代码。这是一个使用您的数据的示例。

df = pd.DataFrame({
        'A':list('abcdef'),
         'B':[4,5,4,5,5,4],
         'C':[7,8,9,4,2,3],
         'D':[1,3,5,7,1,0],
         'E':[5,3,6,9,2,4],
         'F':list('aaabbb')
})

print (df)
   A  B  C  D  E  F
0  a  4  7  1  5  a
1  b  5  8  3  3  a
2  c  4  9  5  6  a
3  d  5  4  7  9  b
4  e  5  2  1  2  b
5  f  4  3  0  4  b

df1 = df.select_dtypes(np.number).idxmax()
print (df1)
B    1
C    2
D    3
E    3
dtype: int64