我有一个数据框,其中有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())
答案 0 :(得分:2)
#[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
<强>计时强>:
{{1}}
答案 1 :(得分:1)
试试这个:
In [7]: df[df.filter(like='Date').isnull().any(1)]
Out[7]:
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
答案 2 :(得分: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]