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

Posted

技术标签:

【中文标题】如何在熊猫数据框中使用列表作为值?【英文标题】:how to use lists as values in pandas dataframe? 【发布时间】:2015-01-04 12:41:23 【问题描述】:

我有一个数据框,它需要列的子集才能包含具有多个值的条目。下面是一个带有“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 文件中的单个条目。

【问题讨论】:

【参考方案1】:

感觉就像您在尝试让 Pandas 成为它不是的东西。如果您总是有 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 数据框。

【讨论】:

【参考方案2】:

看起来 pandas 正在尝试将系列中的所有列表相加并除以行数。这会导致列表串联,并且结果无法通过数字类型检查。这解释了您的错误中的列表。

你可以这样计算平均值:

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

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

序列化列将以类似的方式工作:

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

【讨论】:

以上是关于如何在熊猫数据框中使用列表作为值?的主要内容,如果未能解决你的问题,请参考以下文章

如何将列表中的值分配给熊猫数据框并控制每个列表元素在数据框中的分布/频率

如何从熊猫数据框中的列中删除字符串值

如何从字典列表中提取数据到熊猫数据框中?

使用“或”在熊猫数据框中选择值时如何编写条件[重复]

如何使用嵌套字典列表展平熊猫数据框中的列

如何舍入仅用于在熊猫中显示的值,同时在数据框中保留原始值?