我正面临一个比较问题,这是我的代码:
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开始,但是不幸的是我无法更改它。
非常感谢您对此问题的任何帮助/提示。
答案 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}},这可能会在以后引起一些混乱。按照惯例,df1
是df
的缩写。
您还可以按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)