如何在pandas数据框中使用列表作为值?

2024-05-10 09:20:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,它要求列的一个子集具有多个值的条目。下面是一个带有“runtimes”列的数据帧,其中包含程序在各种条件下的运行时间:

df = [{"condition": "a", "runtimes": [1,1.5,2]}, {"condition": "b", "runtimes": [0.5,0.75,1]}]
df = pandas.DataFrame(df)

这将生成一个数据帧:

  condition        runtimes
0         a     [1, 1.5, 2]
1         b  [0.5, 0.75, 1]

如何处理此数据框并使pandas将其值视为数字列表?例如,计算行中“运行时”列的平均值?

df["runtimes"].mean()

给出错误:"Could not convert [1, 1.5, 2, 0.5, 0.75, 1] to numeric"

使用这些数据帧并将它们序列化为csv文件会很有用,其中,[1, 1.5, 2]这样的列表会转换为"1,1.5,2",因此它仍然是csv文件中的一个条目。


Tags: 文件csv数据程序dataframepandasdf列表
2条回答

看起来熊猫正试图将序列中的所有列表相加并除以行数。这将导致列表连接,结果将无法通过数字类型检查。这解释了错误中的列表。

你可以这样计算平均值:

df['runtimes'].apply(numpy.mean)

除此之外,pandas不喜欢将列表用作值。如果数据是表格式的,请考虑将列表分成三列。

序列化列的工作方式与此类似:

df['runtimes'].apply(lambda x: '"' + str(x)[1:-1] + '"')

感觉你在试图让熊猫变成另一种东西。如果始终有3个运行时,则可以生成3列。然而,Pandas-esqe的方法越多,就是将数据(不管你有多少个不同的试验)标准化为如下内容:

df = [{"condition": "a", "trial": 1, "runtime": 1},
      {"condition": "a", "trial": 2, "runtime": 1.5},
      {"condition": "a", "trial": 3, "runtime": 2},
      {"condition": "b", "trial": 1, "runtime": .5},
      {"condition": "b", "trial": 2, "runtime": .75},
      {"condition": "b", "trial": 3, "runtime": 1}]
df = pd.DataFrame(df)

那你就可以

print df.groupby('condition').mean()


           runtime  trial
condition                
a             1.50      2
b             0.75      2

这里的概念是保持数据表格式,并且每个单元格只有一个值。如果要执行嵌套列表函数,则应使用列表,而不是Pandas数据帧。

相关问题 更多 >