我如何通过使用 pandas

问题描述

下面是我的两个数据框,我正在尝试比较它们。我只想将两个数据帧的第一行视为相同,因为这些值要么是 none,要么是 na 或空白。 我怎样才能避免它们而没有任何错误

政策编号 限制数量 免赔额 Terr_code 再保险
1234 NaN NaN
1234 5 5 Y Y
1234 20000 30000 Y Y

第二个数据框:

政策编号 限制数量 免赔额 Terr_code 再保险
1234 0 0
1234 5 5 Y Y
1234 20000 30000 Y Y

解决方法

NOTE: 使用 iloc[1:] 删除 1st row

如果您需要测试 df 是否相等:

df1.iloc[1].equals(df2.iloc[1]) # prints True

或者如果您想比较每个值:

df1.iloc[1:].compare(df2.iloc[1:],keep_shape = True,keep_equal = True)
,

在比较 2 个数据帧之前,您可以将所有这些类型的空值转换为相同的值,例如 unique

要转换,我们可以定义一个用于转换/翻译的字典,然后使用 NaN 转换两个数据帧。

最后,我们将 2 个数据帧(转换后)与 .compare()

进行比较
.replace

这里,我们定义了用于转换的字典来转换以下所有类型的空值。您可以随意添加或删除条目:

import numpy as np

# define the null values conversion dict
same_dict = {'': np.nan,0: np.nan,'0': np.nan,None: np.nan,'None': np.nan,'NaN': np.nan,'nan': np.nan}

# apply the conversion to the 2 dataframes.  
df1r = df1.replace(same_dict,regex=True)
df2r = df2.replace(same_dict,regex=True)

# compare the 2 dataframes (after convesions)
# Either use compare option that shows differences only
df1r.compare(df2r)

# Or use compare option that keeps all similarities and differences for detailed checking:

df1r.compare(df2r,keep_shape=True,keep_equal=True)

结果:

''        empty string
0         zero (numeric type)
'0'       zero (character type) 
None      None
'None'    String of None
'NaN'     String of NaN
'nan'     String of nan (appears when converting NaN to string)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...