作者:阵风阿斯顿 | 来源:互联网 | 2023-10-09 20:07
篇首语:本文由编程笔记#小编为大家整理,主要介绍了Pandas vs. PEP8:选择具有混合类型的系列中的真值相关的知识,希望对你有一定的参考价值。
我有一个DataFrame
名为df
,列col
包含值True
,False
和"N/A"
(类型分别为bool
,bool
和str
)。我想只选择包含True
的行。
df[df.col==True]
工作,但生成警告PEP 8: comparison to True should be 'if cond is True:' or 'if cond:'
。
有符合PEP8标准的方法吗?
答案
之前曾问过类似的问题,例如pandas: Do I have to deviate from style conventions (PEP 8)?,但它们都描述了一个简单的例子,你只有一列True
和False
值。在那种情况下,你可以只做df[df.col]
。
在你的情况下,虽然你不能这样做,因为它会给出一个错误,但你有其他选择:
- 使用
pd.Series.eq
:
>>> df = pd.DataFrame({'col': [True, False, 'N/A']})
>>> df[df.col.eq(True)]
col
0 True
- 首先检查
"N/A"
,然后比较左边的True
。订单事宜:
>>> df[(df.col != 'N/A') & df.col]
col
0 True
- 用
"N/A"
替换np.nan
并使用pd.Series.notnull
或pd.Series.notna
:
>>> df = df.replace('N/A', np.nan)
>>> df[df.col.notnull() & df.col]
col
0 True