pandas 确认两个熊猫数据框的相等性?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/38212697/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Confirming equality of two pandas dataframes?
提问by Mehdi Jafarnia Jahromi
How to assert that the following two dataframes df1
and df2
are equal?
如何断言以下两个数据帧df1
和df2
是相等的?
import pandas as pd
df1 = pd.DataFrame([1, 2, 3])
df2 = pd.DataFrame([1.0, 2, 3])
The output of df1.equals(df2)
is False
.
As of now, I know two ways:
的输出df1.equals(df2)
是False
。到目前为止,我知道两种方法:
print (df1 == df2).all()[0]
or
或者
df1 = df1.astype(float)
print df1.equals(df2)
It seems a little bit messy. Is there a better way to do this comparison?
好像有点乱。有没有更好的方法来进行这种比较?
回答by Alexander
You can use assert_frame_equal
and not check the dtype of the columns.
您可以使用assert_frame_equal
而不是检查列的 dtype。
# Pre v. 0.20.3
# from pandas.util.testing import assert_frame_equal
from pandas.testing import assert_frame_equal
assert_frame_equal(df1, df2, check_dtype=False)
回答by MaxU
Using elegant @Divakar's idea- numpy's allclose()will do the main trick for numbers:
使用优雅的@Divakar的想法- numpy 的allclose()将执行数字的主要技巧:
In [128]: df1
Out[128]:
0 s n
0 1 aaa 1
1 2 aaa 2
2 3 aaa 3
In [129]: df2
Out[129]:
0 s n
0 1.0 aaa 1.0
1 2.0 aaa 2.0
2 3.0 aaa 3.0
In [130]: (np.allclose(df1.select_dtypes(exclude=[object]), df2.select_dtypes(exclude=[object]))
.....: &
.....: df1.select_dtypes(include=[object]).equals(df2.select_dtypes(include=[object]))
.....: )
Out[130]: True
select_dtypes()will help you to separate strings and all other numeric dtypes
select_dtypes()将帮助您分隔字符串和所有其他数字类型