比较数据框的OrderDict

时间:2018-11-15 16:22:36

标签: python-3.x pandas dictionary dataframe compare

我正面临一个比较问题,这是我的代码:

import pandas as pd
from collections import OrderedDict
from pandas.util.testing import assert_frame_equal

df1 = {'one' : pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
     'two' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd']),
    'three' : pd.Series([1., 2., 3., 4., 5.], index=['a', 'b', 'c', 'd','e'])}

df2 = {'one' : pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
     'two' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd']),
    'three' : pd.Series([1., 2., 3., 4., 5.], index=['a', 'b', 'c', 'd','e'])}
od = OrderedDict() 
od['a'] = pd.DataFrame(df1)
od['b'] = pd.DataFrame(df1)
od['c'] = pd.DataFrame(df1)
od['d'] = pd.DataFrame(df1)

od2 = OrderedDict() 
od2['a'] = pd.DataFrame(df2)
od2['b'] = pd.DataFrame(df2)
od2['c'] = pd.DataFrame(df2)
od2['d'] = pd.DataFrame(df2)

test = assert_frame_equal(od, od2)
print(test)

我有2个由pandas DataFrame组成的OrderedDict,我想分析一下DataFrames中的单个元素是否相等。

我发现函数assert_frame_equal在比较2个DataFrame时非常有效,但是使用OrderedDict给出了此错误:

  

AssertionError:DataFrame预期的类型类   'pandas.core.frame.DataFrame',找到的类   改为使用“ collections.OrderedDict”

对此有任何解决方案或解决方法吗?考虑到我必须从OrderedDict开始,但是不幸的是我无法更改它。

非常感谢您对此问题的任何帮助/提示。

2 个答案:

答案 0 :(得分:1)

看看是否有帮助。使用zip()

for ord1, ord2 in zip(od.values(), od2.values()):

    print(assert_frame_equal(ord1, ord2))

    # or you can also use 
    print(ord1.equals(ord2))

希望这会有所帮助

答案 1 :(得分:1)

像这样?

for df1, df2 in zip(od.values(), od2.values()):
    test = assert_frame_equal(df1, df2)
    print(test)

返回:

None
None
None
None

此外,您正在呼叫初始OrderedDict的{​​{1}},这可能会在以后引起一些混乱。按照惯例,df1df的缩写。

您还可以按What is the difference between `assert_frame_equal` and `equals`使用DataFrame

equal

返回:

for df1, df2 in zip(od.values(), od2.values()):
    test = df1.equals(df2)
    print(test)