如何使用pandas提取表格中非finished状态且包含NaN的行
问题原因
pandas中NaN和任意值做等于/不等于比较时,返回结果都是False,所以你原来的筛选条件df['col2'] != 'finished'遇到col2为NaN的行时,判断结果为False,自然就不会被筛选出来。
解决方法
有两种常用的修改方案:
方案1:使用pandas自带的不等判断方法ne()
Series.ne()方法原生支持对NaN的处理,默认会将NaN判定为和指定值不相等,直接替换筛选条件即可:
tab_not_finished = df[df['col2'].ne('finished')]
方案2:显式增加NaN判断条件
在原有逻辑基础上,加上col2为空的判断,两个条件满足任意一个就会被筛选:
tab_not_finished = df[(df['col2'] != 'finished') | df['col2'].isna()]
调整后完整代码
import pandas as pd from io import StringIO data=""" col1 col2 col3 A1 finished 1234 A2 ongoing 1235 A3 NaN 1236 A4 finished 1237 A5 started 1238 A6 finished 1239 """ data_tsv = StringIO(data) df = pd.read_csv(data_tsv, sep="\t", skiprows=1) # 替换为任意一种方案即可,这里以ne()方法为例 tab_not_finished = df[df['col2'].ne('finished')] print(tab_not_finished)
运行后就可以得到你期望的包含NaN行的结果。
内容的提问来源于stack exchange,提问作者disukumo
相关产品推荐
相关产品推荐

