【问题标题】:Only use part of a Pandas dataframe仅使用 Pandas 数据框的一部分
【发布时间】:2016-12-14 14:38:55
【问题描述】:

我觉得我在问一个非常愚蠢的问题,已经被问了一千次,但我似乎在任何地方都找不到。我可能使用了错误的术语。

无论如何,我有一个熊猫框架df。我想使用这个数据框的一部分。更具体地说,我想循环使用它:

unique_values = df['my_column'].tolist()
unique_values = list(set(unique_values))

for value in unique_values:
    tempDf = df[df['my_column] == value]
    # Do stuff with tempDf

但这似乎不起作用。还有另一种方法可以按列的值“过滤”数据框吗?

【问题讨论】:

  • 该死的精英主义者,因为有人问了一个基本问题而投了反对票。至少评论告诉我出了什么问题。
  • 在什么情况下不工作?
  • @BramVanroy 我没有对你投反对票。但我有一个倾向。原因是这个问题似乎含糊不清。我们通常会提出问题以遵守 MCVE 标准 (stackoverflow.com/help/mcve)。有时,您询问的语气以及没有直接解决方案我们可以与之比较以及谁知道其他人在想什么的事实,可能会导致否决票。如果它看起来很直接回答,我会停止考虑回答这个问题。在这种情况下,您需要回答者完成所有工作,为您提供示例。
  • @BramVanroy 这里是关于如何问熊猫问题的一些答案。 stackoverflow.com/a/20159305/2336654; stackoverflow.com/a/38466059/2336654。这些可以让人们进一步了解为什么人们可能对这个问题投了反对票。
  • @BramVanroy,我没有投反对票,在 8300 中享有盛誉。所以人们会期待一个更清晰的问题。

标签: python pandas filter


【解决方案1】:

改用df.groupby

for value, tempDf in df.groupby('my_column'):
    # Do stuff with tempDf

在修复 'my_column 周围缺少的单引号后,您的代码确实有效,但会比使用 df.groupby 慢。

在循环中评估 df['my_column'] == value 会迫使 Pandas 对循环的每次迭代运行 len(df) 比较。 df.groupby 将 DataFrame 分成组,一次通过 DataFrame。

【讨论】:

  • 抱歉,我没有注意到您在回答中提到了错误,并认为这只是问题中的错字,而不是实际代码中的错字。但这个假设可能不正确,所以我把它回滚了。
  • 无论哪种方式都可以。但这是我在 OP 代码中看到的唯一错误。
【解决方案2】:
for value in unique_values:
    tempDf = df.where(df['column_name'] == value)
    # Do stuff with tempDf

另外你可以使用查询语句

for value in unique_values:
     tempDf = df.query('(column_name == value)')
     # Do stuff with tempDf

或者你可以这样做

for value in unique_values:
         tempDf = df[df['my_column] == value]
         tempDf = tempDf .query('(value == True)')
         # Do stuff with tempDf

虽然最后一个看起来效率低下

【讨论】:

  • 控制台返回此ValueError: where requires an ndarray like object for its condition
猜你喜欢
  • 2020-05-04
  • 2019-02-09
  • 2014-10-10
  • 2019-04-23
  • 2023-03-22
  • 1970-01-01
  • 2021-08-27
  • 2018-11-16
  • 1970-01-01
相关资源
最近更新 更多