查找没有有限值的 pandas 数据帧的行索引
Find row index of pandas dataframe that don't have finite values
我有一个大数据框,当所有列都是 nan 或没有有限值时,我想拆分它。我正在寻找类似于 post Drop rows of pandas dataframe that don't have finite values in certain variable(s) 的东西,但我不想删除这些行。
我目前在 pandas 0.16.0
正如@EdChum 指出的那样
df[df.apply(lambda x: x.isnull().all(), axis=1)]
成功了。
通过在从 dropna
:
返回的索引标签上调用 index.difference
,从 df 中过滤非 NaN
行会更快
In [69]:
df = pd.DataFrame({'a':[0,np.NaN, 0], 'b':[np.NaN, np.NaN, 1]})
df = pd.concat([df]*10000, ignore_index=True)
%timeit df[df.apply(lambda x: x.isnull().all(), axis=1)]
%timeit df.loc[df.index.difference(df.dropna(how='all').index)]
1 loops, best of 3: 2.82 s per loop
100 loops, best of 3: 8.95 ms per loop
可以看到对于30k行的df,后一种方法要快很多
我有一个大数据框,当所有列都是 nan 或没有有限值时,我想拆分它。我正在寻找类似于 post Drop rows of pandas dataframe that don't have finite values in certain variable(s) 的东西,但我不想删除这些行。
我目前在 pandas 0.16.0
正如@EdChum 指出的那样
df[df.apply(lambda x: x.isnull().all(), axis=1)]
成功了。
通过在从 dropna
:
index.difference
,从 df 中过滤非 NaN
行会更快
In [69]:
df = pd.DataFrame({'a':[0,np.NaN, 0], 'b':[np.NaN, np.NaN, 1]})
df = pd.concat([df]*10000, ignore_index=True)
%timeit df[df.apply(lambda x: x.isnull().all(), axis=1)]
%timeit df.loc[df.index.difference(df.dropna(how='all').index)]
1 loops, best of 3: 2.82 s per loop
100 loops, best of 3: 8.95 ms per loop
可以看到对于30k行的df,后一种方法要快很多