Python 从列中包含一个元素的列表中提取字典值

Python 从列中包含一个元素的列表中提取字典值,python,pandas,Python,Pandas,我有一个带有列的pandas数据框架,该列是一个包含单个字典的列表。 例如: col1 [{'type': 'yellow', 'id': 2, ...}] [{'type': 'brown', 'id': 13, ...}] ... 我需要提取与“type”关键字关联的值。有不同的方法可以做到这一点,但由于我的数据帧很大(几百万行),我需要一种有效的方法来做到这一点,但我不确定哪种方法是最好的。访问大多数数据结构中的任何元素都是O(1)操作。我相信熊猫数据帧也不例外。您将面临的唯一问题是:在

我有一个带有列的pandas数据框架,该列是一个包含单个字典的列表。 例如:

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,但我不知道这是否与我得到的错误有关。