如何将单个pandas数据框列中包含的字典转换为单独的列?

雅各布·费雷奥洛

我有一个熊猫数据框,其中包含几个id字段,另一个字段包含一个需要附加到id字段的附加值的字典。我试图将这本字典中的数据透视起来并使每个条目在现有数据框中都具有自己的单独列

下面的代码实现了我想要的功能,但是速度很慢。有没有更有效的方法来获得相同的结果?

import pandas as pd

# Create sample table
a=[{'Feature1': 'aa1','Feature2': 'bb1','Feature3': 'cc2' },
 {'Feature1': 'aa2','Feature2': 'bb2', 'Feature3': 'abc' },
 {'Feature1': 'aa1','Feature2': 'cc1', 'Feature3': 'xyz' }
 ]
b=['num1','num2','num3']
c=['numa', 'numb', 'numc']

df = pd.DataFrame({'id1':b, 'id2':c, 'dic':a })

# Specify fields to construct the empty dataframe
cols = [
    'id1',
    'id2',
    'Feature1',
    'Feature2',
    'Feature3'
    ]
results = pd.DataFrame(columns=cols)

# Iterate through each row and grab values
for idx, row in df.iterrows():
    id_records = list(row[['id1', 'id2']])
    other_vals = list(row['dic'].values())
    results.loc[idx] = id_records+other_vals

编辑:在我的实际用例中,某些词典缺少某些键。例如,第二行可能没有“ Feature2”。我希望该字段对于该记录为空。我不确定如何以低效的方式执行此操作。

该代码定义了一些更接近我实际数据的东西。

# Create sample table
a=[{'Feature1': 'aa1','Feature2': 'bb1','Feature3': 'cc2' },
 {'Feature1': 'aa2', 'Feature3': 'abc' },
 {'Feature1': 'aa1','Feature2': 'cc1', 'Feature3': 'xyz' }
 ]
b=['num1','num2','num3']
c=['numa', 'numb', 'numc']

df = pd.DataFrame({'id1':b, 'id2':c, 'dic':a })

解:

除了以下解决方案之外,我的实际数据还没有注册为真实词典。它被注册为看起来像字典的字符串。我必须将其转换为字典,然后以下解决方案起作用。

我就是这样

import json

def convert_to_dict(string):
    return(json.loads(string))

df['fieldName'] = df.fieldName.apply(convert_to_dict)

完成此操作后,Andy的解决方案对我来说效果很好。

安迪(Andy L.)

编辑在您更新的示例。缺少Feature构造为NaN

df_final = df.drop('dic',1).join(pd.DataFrame.from_dict(df.dic.to_dict(), 
                                                        orient='index'))

Out[1082]:
    id1   id2 Feature1 Feature2 Feature3
0  num1  numa      aa1      bb1      cc2
1  num2  numb      aa2      NaN      abc
2  num3  numc      aa1      cc1      xyz

试试这个

df_final = df.drop('dic',1).join(pd.DataFrame.from_dict(df.dic.to_dict(), 
                                                        orient='index'))

Out[1060]:
    id1   id2 Feature1 Feature2 Feature3
0  num1  numa      aa1      bb1      cc2
1  num2  numb      aa2      bb2      abc
2  num3  numc      aa1      cc1      xyz

其他几种不同的方式:

来自@Shubham Sharma:

df_final = df.drop('dic', 1).join(pd.DataFrame(df['dic'].tolist()))

来自@anky:

df_final = df.join(pd.DataFrame(df.pop('dic').tolist()))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将每个熊猫数据框行转换为包含列值作为属性的对象?

如何将嵌套字典转换为pandas数据框?

将包含字典列表的列转换为pandas数据框中的多个列

如何将唯一行的pandas数据框列转换为单独的列标题,计数并求和相邻行的值?

如何将包含列表的熊猫列转换为数据框

将字典词典中的单个条目转换为以键为列的数据框

将包含字典的字典列表转换为Pandas数据框

如何将数据框列对转换为单个字典映射?

如何将数据框线转换为python pandas中的列?

如何将基于列的大型数据框转换为R中的数据框列表

如何将字典中的一列转换为熊猫中的单独列?

如何将字典的多列转换为数据框?

如何将嵌套字典转换为pandas数据框?

如何将仅包含值且不包含列的pandas DataFrame转换为Python字典?

如何将包含字典的列表转换为新的pandas列?

如何通过对列进行分组将Pandas数据框转换为数据框字典

如何将多键字典转换为每个键和值都有自己列的pandas数据框?

如何将包含元组列表的字典中的字典转换为pandas数据框

如何将包含列表的列转换为熊猫数据框中的单独列?

如何将类对象数组转换为 Pandas 中带有列的数据框?

如何基于pandas中的groupby函数将数据框中的特定列转换为字典?

将字典列转换为数据框

如何将单个列表转换为具有多列的数据框?

如何将 Pandas 数据框中的列转换为 Time 对象

如何将包含键和值对的 dtype 对象列转换为新的数据框

如何将字典应用于包含 Pandas 中的 numpy 数组的数据框列

如何将 Pandas 数据框的行转换为列

如何将数据框中的列转换为python中的嵌套字典?

将字典列转换为 pyspark 数据框中的列