Python 从列中包含一个元素的列表中提取字典值
我有一个带有列的pandas数据框架,该列是一个包含单个字典的列表。 例如:Python 从列中包含一个元素的列表中提取字典值,python,pandas,Python,Pandas,我有一个带有列的pandas数据框架,该列是一个包含单个字典的列表。 例如: col1 [{'type': 'yellow', 'id': 2, ...}] [{'type': 'brown', 'id': 13, ...}] ... 我需要提取与“type”关键字关联的值。有不同的方法可以做到这一点,但由于我的数据帧很大(几百万行),我需要一种有效的方法来做到这一点,但我不确定哪种方法是最好的。访问大多数数据结构中的任何元素都是O(1)操作。我相信熊猫数据帧也不例外。您将面临的唯一问题是:在
col1
[{'type': 'yellow', 'id': 2, ...}]
[{'type': 'brown', 'id': 13, ...}]
...
我需要提取与“type”关键字关联的值。有不同的方法可以做到这一点,但由于我的数据帧很大(几百万行),我需要一种有效的方法来做到这一点,但我不确定哪种方法是最好的。访问大多数数据结构中的任何元素都是O(1)操作。我相信熊猫数据帧也不例外。您将面临的唯一问题是:在行中循环。可能没有办法了。让我们试试这个:
data = {
'col': [[{'type': 'yellow', 'id': 2}], [{'type': 'brown', 'id': 13}], np.nan]
}
df = pd.DataFrame(data)
print(df)
col
0 [{'type': 'yellow', 'id': 2}]
1 [{'type': 'brown', 'id': 13}]
2 NaN
使用explode
和str
访问器:
df['result'] = df.col.explode().str['type']
输出:
col result
0 [{'type': 'yellow', 'id': 2}] yellow
1 [{'type': 'brown', 'id': 13}] brown
2 NaN NaN
实现“不同的方法”,并用100000行或100万行对它们进行基准测试?您最好的选择(可能是唯一的方法)是循环,例如
df['col1'].apply(lambda x:x[0].get('type'))
。谢谢Quang Hoang,一个相关的问题:当我应用您的解决方案时,我得到了“TypeError:'float'对象不可订阅”。你知道为什么吗?我必须补充一点,我的col1有时包含NAN,但我不知道这是否与我得到的错误有关。