【问题标题】:Find row index of pandas dataframe that don't have finite values查找没有有限值的 pandas 数据帧的行索引
【发布时间】:2016-06-05 12:54:06
【问题描述】:

我有一个大型数据框,当所有列都是 nan 或没有有限值时,我想拆分它。我正在寻找类似于Drop rows of pandas dataframe that don't have finite values in certain variable(s) 的帖子,但我不想放弃我想拆分这些行。

我目前正在使用 pandas 0.16.0

【问题讨论】:

  • df[df.apply(lambda x: x.isnull().all(), axis=1)] 工作吗?
  • df.dropna(how='all')也不给你回这个吗?
  • @EdChum 绝对完美。谢谢你。 dropna 返回没有 nans 的数据框,而不是带有 nans 的行。
  • 第一个建议哪个有效?,对于大的df会很慢,不确定这样做是否更快df.loc[df.index.difference(df.dropna(how='all').index)]

标签: python pandas notnull


【解决方案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,后一种方法要快得多

【讨论】:

    【解决方案2】:

    正如@EdChum 指出的那样

    df[df.apply(lambda x: x.isnull().all(), axis=1)]
    

    成功了。

    【讨论】:

      猜你喜欢
      • 2017-02-06
      • 2020-07-10
      • 2013-03-15
      • 1970-01-01
      • 2023-03-05
      • 2012-12-10
      • 1970-01-01
      • 1970-01-01
      • 2020-08-03
      相关资源
      最近更新 更多