从数据框架中的列中提取字典值

2024-06-01 19:12:07 发布

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

我正在寻找一种方法来优化我的代码。

我有此表格中的输入数据:

import pandas as pn

a=[{'Feature1': 'aa1','Feature2': 'bb1','Feature3': 'cc2' },
 {'Feature1': 'aa2','Feature2': 'bb2' },
 {'Feature1': 'aa1','Feature2': 'cc1' }
 ]
b=['num1','num2','num3']


df= pn.DataFrame({'num':b, 'dic':a })

我想从上面数据框中“dic”(如果存在)列的字典中提取元素“Feature3”。到目前为止,我能解决它,但我不知道这是否是最快的方法,它似乎有点过于复杂。

Feature3=[]
for idx, row in df['dic'].iteritems():
    l=row.keys()

    if 'Feature3' in l:
        Feature3.append(row['Feature3'])
    else:
        Feature3.append(None)

df['Feature3']=Feature3
print df

有没有更好/更快/更简单的方法来提取这个特性3以分离数据帧中的列?

提前谢谢你的帮助。


Tags: 数据方法代码inimportdf表格row
3条回答
df['Feature3'] = df['dic'].apply(lambda x: x.get('Feature3'))

同意maxymoo。考虑更改数据帧的格式。

(旁注:熊猫一般作为pd进口)

如果你applyaSeries,你会得到一个非常好的DataFrame

>>> df.dic.apply(pn.Series)
    Feature1    Feature2    Feature3
0   aa1 bb1 cc2
1   aa2 bb2 NaN
2   aa1 cc1 NaN

从这一点上说,你可以使用常规的熊猫手术。

您可以使用列表理解从数据框中的每一行提取功能3,返回一个列表。

feature3 = [d.get('Feature3') for d in df.dic]

如果'Feature3'不在dic中,则默认情况下返回None。

您甚至不需要panda,因为您可以再次使用列表理解从原始字典中提取功能。

feature3 = [d.get('Feature3') for d in a]

相关问题 更多 >