【问题标题】:Pandas .agg() dropping columns (lambda function)Pandas .agg() 删除列(lambda 函数)
【发布时间】:2020-02-17 10:45:37
【问题描述】:

我有一个 df (df.shape = (14762, 35))。

Number    Day        Colour   City ...
123       Monday     Red      London ...
234       Monday     Blue     Paris ...
234       Wednesday  Yellow   Paris ... 
345       Tuesday    Green    Berlin ...

我正在尝试对 df 进行分组和聚合以生成

Number    Day                Colour        City ...
123       Monday             Red           London ...
234       Monday, Wednesday  Blue, Yellow  Paris ...
345       Tuesday            Green         Berlin ...

我正在使用

df.groupby('Number').agg(lambda s: ', '.join({*s}))

但是,我的新 df 有一个形状 (5435, 22)。问题出在聚合步骤 lambda 函数中。 groupby 步骤工作正常。只是想知道为什么 .agg 或 .join 可能会删除某些列。我在 groupby 期间读过有关令人讨厌的专栏,但我认为这不是问题所在。

我已经打印了.dtypes,被删除的列是object、int64 和float64。

我正在使用 Python 3.6.9 和 pandas 0.25.3。

【问题讨论】:

  • 什么版本的pandas,什么版本的python?此外,在原始数据框中 - 被删除的列的 dtype 是什么?
  • Python 3.6.9 和 Pandas 0.25.3。被删除的列是对象,float64s int64s。有些对象是 {} 大括号内的字典,因为文件是从 .json 读取的,但不是全部。
  • 我希望 float64 和 int64 被删除,因为 join 函数将引发 TypeError。您可以通过将聚合函数更改为 lambda x: ', '.join([str(i) for i in x]) 来解决此问题

标签: pandas join lambda group-by aggregate


【解决方案1】:

我希望 float64 和 int64 被删除,因为 join 函数将引发 TypeError。您可能面临同样的问题,即也无法在其他 object 列上使用 join。

您可以通过将聚合函数更改为 - 来解决此问题

lambda x: ', '.join([str(i) for i in x])

【讨论】:

  • 这似乎奏效了,谢谢。我没有意识到加入与float64 和int64types 斗争。代码运行良好,没有报错,奇怪...
  • 太棒了!是的,join 确实与非字符串格式作斗争。例如, ', '.join([1, 2, 3]) 将引发TypeError- 但我不确定这种静默失败的行为是否是熊猫设计的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-20
  • 2015-02-10
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 1970-01-01
相关资源
最近更新 更多