【问题标题】:How to delete a row based on number of cells in this row如何根据该行中的单元格数删除一行
【发布时间】:2021-07-06 16:02:24
【问题描述】:

我有一个很长的数据框,其中包含我的项目的一些数据 我想删除包含超过 2 个单元格的行

这是我的示例代码

A         B           C          D          E          F
9012_1   :2683_1_0
9044_0   :2680_1_0
9007_1   9007_2      :8487_3_0   :8487_4_0  :2675_1_0
8814_2   :8374_1_2
77114_0  77114_1     :53453_1_0  :53453_1_1

我希望我的输出是这样的

A         B           C          D          E          F
9012_1   :2683_1_0
9044_0   :2680_1_0

8814_2   :8374_1_2

怎么可能呢,我找了很多遍都没有找到答案。

谢谢

【问题讨论】:

  • 空单元格是字符串("")?还是 NaN?
  • 我认为单元格是 NaNs

标签: pandas dataframe csv data-manipulation delete-row


【解决方案1】:

我假设df 与@Andrej 相同。

您可以使用count(axis=1),它将跨列计算非nan,并将~ 运算符与gt(3) 一起使用。这将删除超过 2 个非 nan 的行。

print(df[~df.count(1).gt(3)])

        A          B    C    D    E   F
0  9012_1  :2683_1_0  NaN  NaN  NaN NaN
1  9044_0  :2680_1_0  NaN  NaN  NaN NaN
3  8814_2  :8374_1_2  NaN  NaN  NaN NaN

【讨论】:

    【解决方案2】:

    根据您的评论,我假设您有这个数据框:

             A          B           C           D          E   F
    0   9012_1  :2683_1_0         NaN         NaN        NaN NaN
    1   9044_0  :2680_1_0         NaN         NaN        NaN NaN
    2   9007_1     9007_2   :8487_3_0   :8487_4_0  :2675_1_0 NaN
    3   8814_2  :8374_1_2         NaN         NaN        NaN NaN
    4  77114_0    77114_1  :53453_1_0  :53453_1_1        NaN NaN
    

    然后:

    print(df[df.notna().sum(1) <= 2])
    

    打印:

            A          B    C    D    E   F
    0  9012_1  :2683_1_0  NaN  NaN  NaN NaN
    1  9044_0  :2680_1_0  NaN  NaN  NaN NaN
    3  8814_2  :8374_1_2  NaN  NaN  NaN NaN
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多