【问题标题】:How to convert array column to int array in Pandas?如何在 Pandas 中将数组列转换为 int 数组?
【发布时间】:2021-08-24 16:29:43
【问题描述】:

我有一个 DataFrame grouped_reps,其中包含名称和与这些名称相关的特定数字数组。

数据框基本上是这样的:

grouped_reps = pd.DataFrame({
    'A': ['John', 'Mary', 'Tom'],
    'util_rate': [[1.0, 0.75, 0.90], [1.0, 0.80, 0.87],
                  [0.74, 0.34, 0.90, 0.45]]
})

这两列目前都是对象数据类型。

我正在尝试获取与名称关联的每个数组的平均值并将其存储在数据框中的新列中,但为此我必须先将数组转换为浮点数组。我正在尝试这样做:

grouped_reps["util_rate"] = grouped_reps["util_rate"].astype(str).astype(float)

但我收到此错误:

ValueError: could not convert string to float: '[1.0, 0.75, 0.9]'

【问题讨论】:

  • @HenryEcker 我不知道如何使问题可重现,因为这个问题对我来说是独一无二的,因为我有一个导入的数据集。
  • @garchukins 您的编辑朝着正确的方向前进!看看我为一些想法所做的编辑。通常,您要确保您的尝试也适用于示例帧,例如,如果数据帧为 grouped_reps,则不要将其称为 df,如果列是“util_rate”,则不要将其称为“B” .此外,报告 sample 数据的错误消息,以便重现。
  • @HenryEcker 非常感谢您的帮助!你帮助我理解了我做错了什么。

标签: python arrays pandas dataframe


【解决方案1】:

要获得每个列表的均值,将explode 列表分成多行,通过astype 转换为float,然后在level=0 上计算mean

grouped_reps['mean'] = (
    grouped_reps['util_rate'].explode().astype(float).mean(level=0)
)

grouped_reps:

      A                util_rate      mean
0  John         [1.0, 0.75, 0.9]  0.883333
1  Mary         [1.0, 0.8, 0.87]  0.890000
2   Tom  [0.74, 0.34, 0.9, 0.45]  0.607500

解释:

Explode 生成一个序列,其中每个元素都在自己的行中:

grouped_reps['util_rate'].explode()
0     1.0
0    0.75
0     0.9
1     1.0
1     0.8
1    0.87
2    0.74
2    0.34
2     0.9
2    0.45
Name: util_rate, dtype: object

转换为浮点数:

grouped_reps['util_rate'].explode().astype(float)
0    1.00
0    0.75
0    0.90
1    1.00
1    0.80
1    0.87
2    0.74
2    0.34
2    0.90
2    0.45
Name: util_rate, dtype: float64

由于索引与每一行的索引对齐,我们可以取相对于level=0 的平均值:

grouped_reps['util_rate'].explode().astype(float).mean(level=0)
0    0.883333
1    0.890000
2    0.607500
Name: util_rate, dtype: float64

【讨论】:

  • 谢谢,这就是我要找的。​​span>
猜你喜欢
  • 1970-01-01
  • 2020-10-26
  • 1970-01-01
  • 1970-01-01
  • 2012-09-28
  • 2020-11-12
  • 2015-01-10
  • 1970-01-01
  • 2018-01-31
相关资源
最近更新 更多