Pandas 比较列并认为 NULL 相等

问题描述 投票:0回答:2

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
,但我希望能有一个很好的单行比较,类似于我在示例中已经有的内容。

python-3.x pandas dataframe calculated-columns
2个回答
0
投票

您可以在比较之前将列转换为字符串:

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

0
投票

另一种可能的解决方案:

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
© www.soinside.com 2019 - 2024. All rights reserved.