Python 3.9
我使用 Pandas 将两个数据框连接在一起,并想要比较列值是否相等。
但是,每当我遇到 NULL(或 NA?)值时,我的比较都会返回
False
import pandas as pd
# create test dataframes
df_1 = pd.DataFrame({'key': [1, 2, 3, 4], 'field1': ['foo', 'bar', 'baz', None]})
df_2 = pd.DataFrame({'pk': [1, 2, 3, 4], 'field2': ['foo', 'bar', 'baz', None]})
# left join
df_joined = df_1.merge(df_2, 'left', left_on = 'key', right_on = 'pk')
# calculate comparison field
df_joined['compare'] = df_joined['field1'] == df_joined['field2']
print(df_joined)
# yields
key field1 pk field2 compare
0 1 foo 1 foo True
1 2 bar 2 bar True
2 3 baz 3 baz True
3 4 None 4 None False
我希望第 4 行中的
None
== None
为 True
。
我知道这可以通过函数和 Pandas 来完成
apply
,但我希望能有一个很好的单行比较,类似于我在示例中已经有的内容。
您可以在比较之前将列转换为字符串:
df_joined["compare"] = df_joined["field1"].astype(str) == df_joined["field2"].astype(str)
print(df_joined)
打印:
key field1 pk field2 compare
0 1 foo 1 foo True
1 2 bar 2 bar True
2 3 baz 3 baz True
3 4 None 4 None True
另一种可能的解决方案:
df_joined.assign(compare = df_joined.field1.eq(df_joined.field2))
输出:
key field1 pk field2 compare
0 1 foo 1 foo True
1 2 bar 2 bar True
2 3 baz 3 baz True
3 4 None 4 None True