如何计算 Pandas 中列值是假的?
How to count where column value is falsy in Pandas?
有一个列名为 ADDRESS
的数据框:
我尝试计算地址为 null, false, Nan, None, empty string
等的行数
我试过这个:
t = len(new_dfr[new_dfr['ADDRESS'] == ''])
print(r)
如何在 Pandas 中做到这一点?
您可以使用 isna():
计算 NA 值
df['ADDRESS'].isna().sum()
这将计算所有 None、NaN 值,但不计算 False
或空字符串。您可以将 False
替换为 None
来覆盖:
df['ADDRESS'].replace('', None).replace(False, None).isna().sum()
如果我没理解错的话,您基本上是想计算包括 NaN 在内的所有虚假值(注意 NaNs are considered truthy)。在 pandas 术语中,这可以翻译成
# (ADDRESS is NaN) OR (ADDRESS is not truthy)
(new_dfr['ADDRESS'].isna() | ~new_dfr['ADDRESS'].astype(bool)).sum()
示例:
new_dfr = pd.DataFrame({
'ADDRESS': [np.nan, None, False, '', 0, 1, True, 'not empty']
})
>>> new_dfr
ADDRESS
0 NaN
1 None
2 False
3
4 0
5 1
6 True
7 not empty
>>> new_dfr['ADDRESS'].isna()
0 True
1 True
2 False
3 False
4 False
5 False
6 False
7 False
Name: ADDRESS, dtype: bool
>>> ~new_dfr['ADDRESS'].astype(bool)
0 False
1 True
2 True
3 True
4 True
5 False
6 False
7 False
Name: ADDRESS, dtype: bool
>>> new_dfr['ADDRESS'].isna() | ~new_dfr['ADDRESS'].astype(bool)
0 True
1 True
2 True
3 True
4 True
5 False
6 False
7 False
Name: ADDRESS, dtype: bool
>>> (new_dfr['ADDRESS'].isna() | ~new_dfr['ADDRESS'].astype(bool)).sum()
5
有一个列名为 ADDRESS
的数据框:
我尝试计算地址为 null, false, Nan, None, empty string
等的行数
我试过这个:
t = len(new_dfr[new_dfr['ADDRESS'] == ''])
print(r)
如何在 Pandas 中做到这一点?
您可以使用 isna():
计算 NA 值df['ADDRESS'].isna().sum()
这将计算所有 None、NaN 值,但不计算 False
或空字符串。您可以将 False
替换为 None
来覆盖:
df['ADDRESS'].replace('', None).replace(False, None).isna().sum()
如果我没理解错的话,您基本上是想计算包括 NaN 在内的所有虚假值(注意 NaNs are considered truthy)。在 pandas 术语中,这可以翻译成
# (ADDRESS is NaN) OR (ADDRESS is not truthy)
(new_dfr['ADDRESS'].isna() | ~new_dfr['ADDRESS'].astype(bool)).sum()
示例:
new_dfr = pd.DataFrame({
'ADDRESS': [np.nan, None, False, '', 0, 1, True, 'not empty']
})
>>> new_dfr
ADDRESS
0 NaN
1 None
2 False
3
4 0
5 1
6 True
7 not empty
>>> new_dfr['ADDRESS'].isna()
0 True
1 True
2 False
3 False
4 False
5 False
6 False
7 False
Name: ADDRESS, dtype: bool
>>> ~new_dfr['ADDRESS'].astype(bool)
0 False
1 True
2 True
3 True
4 True
5 False
6 False
7 False
Name: ADDRESS, dtype: bool
>>> new_dfr['ADDRESS'].isna() | ~new_dfr['ADDRESS'].astype(bool)
0 True
1 True
2 True
3 True
4 True
5 False
6 False
7 False
Name: ADDRESS, dtype: bool
>>> (new_dfr['ADDRESS'].isna() | ~new_dfr['ADDRESS'].astype(bool)).sum()
5