当特定列在熊猫中具有空值时选择数据

新手上路,请多包涵

我有一个数据框,其中有 2 个日期字段我想过滤并在任何一个日期字段为空时查看行。

 ID          Date1       Date2
58844880    04/11/16    NaN
59745846    04/12/16    04/14/16
59743311    04/13/16    NaN
59745848    04/14/16    04/11/16
59598413    NaN         NaN
59745921    04/14/16    04/14/16
59561199    04/15/16    04/15/16
NaN         04/16/16    04/16/16
59561198    NaN         04/17/16

它应该如下所示

ID          Date1       Date2
58844880    04/11/16    NaN
59743311    04/13/16    NaN
59598413    NaN         NaN
59561198    NaN         04/17/16

尝试了代码 df = (df['Date1'].isnull() | df['Date1'].isnull())

原文由 yasin mohammed 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 273
2 个回答

使用 boolean indexing

 mask = df['Date1'].isnull() | df['Date2'].isnull()
print (df[mask])
           ID     Date1     Date2
0  58844880.0  04/11/16       NaN
2  59743311.0  04/13/16       NaN
4  59598413.0       NaN       NaN
8  59561198.0       NaN  04/17/16

时间

 #[900000 rows x 3 columns]
df = pd.concat([df]*100000).reset_index(drop=True)

In [12]: %timeit (df[df['Date1'].isnull() | df['Date2'].isnull()])
10 loops, best of 3: 89.3 ms per loop

In [13]: %timeit (df[df.filter(like='Date').isnull().any(1)])
10 loops, best of 3: 146 ms per loop

原文由 jezrael 发布,翻译遵循 CC BY-SA 3.0 许可协议

快速查看任一列是否有空值

df.isnull().any()

计算具有任何空值的行

df.isnull().sum()

获取具有空值的行

(1) 创建空值真值表(即根据是否具有空值,在每个列/单元格中创建带有 True/False 的数据框)

 truth_table = df.isnull()

(2) 创建真值表,最终显示哪些行具有任何空值

conclusive_truth_table = truth_table.any(axis='columns')

(3) 隔离/显示具有任何空值的行

df[conclusive_truth_table]

(1)-(3) 放在一起

df[df.isnull().any(axis='columns')]

或者

隔离在任何指定列中具有空值的行

df.loc[:,['Date1','Date2']].isnull().any(axis='columns')

隔离在两个指定列中都具有空值的行

df[ df.loc[ :,['Date1','Date2'] ].isnull().sum(axis=1) == 2]

原文由 markling 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题