【问题标题】:Delete Columns within a Pandas Dataframe column range where sum of each column is less than 10删除 Pandas Dataframe 列范围内每列之和小于 10 的列
【发布时间】:2019-10-21 04:01:21
【问题描述】:

如果该列的总行总和值小于 10,我需要遍历预定义的列范围并删除/删除该列,但我无法让它工作。到目前为止,我已经尝试了以下各种迭代:

for column in FinalData.columns[109:]:
    if FinalData[column].sum < 10:
        FinalData[column].drop

数据框 FinalData 包含 300 列数据,我只想应用到 109 列以后。 运行上面的代码会产生错误:

TypeError: '<' not supported between instances of 'method' and 'int'

我对 Python 很陌生,仅将它用于数据分析,欢迎任何帮助。

【问题讨论】:

  • 您能否添加一些示例数据来说明您的实际数据的样子,因为行 “如果该列的总行总和值小于 10,则删除/删除该列” i> 有点矛盾。因为你可以得到一列的总和,或者一行多列的总和。
  • sum() 不是sumdrop() 不是drop。这些是属性,而不是方法,您需要调用它们。
  • 二凡。我想一次获取一列的总数,如果符合条件,则删除该列。因此,如果我有 10k 行和 100 列,我想计算第 1 列中所有这些 10k 单元格的总和(与 DF 中的任何其他列无关),如果该总和小于 10,那么我想要删除该列以删除该列,然后评估下一列。

标签: python python-3.x pandas for-loop calculated-columns


【解决方案1】:

您收到错误是因为其中一列包含非数字数据。如果您希望代码运行没有错误(即只删除总和 > 10 的数字列),您可以使用:

from pandas.api.types import is_numeric_dtype

for column in FinalData.columns[109:]:
    if is_numeric_dtype(FinalData[column]):
        if sum(FinalData[column]) < 10:
           FinalData.drop([column], axis=1, inplace=True)

【讨论】:

  • sum 是一种方法,而不是一种属性。你需要调用它,否则你会得到同样的错误。他将方法与整数进行比较,而不是调用方法的结果,他的错误表明与非数字数据无关
  • 感谢 Carsten 提供代码。我尝试运行,但可以确认 User348203 是正确的,它仍然无法运行。那么如何调用函数呢?是否需要在 VBA 中编写类似于 UDF 的 def 函数?
  • 不能通过写.sum来调用sum函数。但是,我上面的代码使用了“sum()”,这是一个函数。或者你可以试试np.sum()
  • 对不起,卡斯滕。没有意识到你已经修复了那个元素。我尝试运行它,但得到 TypeError: 'Series' object is not callable。如果额外的信息有用 - 请注意我要删除的所有列都包含 1 和 0 的组合。这些列的 dtype 是 'uint8'。
猜你喜欢
  • 1970-01-01
  • 2015-10-30
  • 2018-04-28
  • 1970-01-01
  • 1970-01-01
  • 2018-01-25
  • 1970-01-01
  • 2016-03-03
  • 1970-01-01
相关资源
最近更新 更多