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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 01:31:22  来源:igfitidea点击:

Confirming equality of two pandas dataframes?

pythonpandas

提问by Mehdi Jafarnia Jahromi

How to assert that the following two dataframes df1and df2are equal?

如何断言以下两个数据帧df1df2是相等的?

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_equaland 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()将帮助您分隔字符串和所有其他数字类型