将包含字典的dataframe单元格转换为具有新列的dataframe

2024-09-30 01:29:06 发布

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

这是数据框。其中包含一些单元格,其中包含字典。我想将字典项转换为列

dfx={'name':['Alex','Jin',np.nan,'Peter'],
     'age':[np.nan,10,12,13],
     'other':[{'school':'abc','subject':'xyz'},
     np.nan,
     {'school':'abc','subject':'xyz'},
     np.nan,]
     }

dfx=pd.DataFrame(dfx)

输出

name    age        other
Alex             {'school': 'abc', 'subject': 'xyz'}
Jin     10.0    
        12.0     {'school': 'abc', 'subject': 'xyz'}
Peter   13.0    

这是所需的输出

name    age      school    subject
Alex             abc         xyz
Jin     10.0        
        12.0     abc         xyz
Peter   13.0    

Tags: 数据nameage字典npnanpetersubject
3条回答

创建一个dictionarydfxotherpd.DataFrame字典和transpose。这将给你一个新的dataframe。将结果dataframe连接到dfx的前两列

dfx.iloc[:,:-1].join(pd.DataFrame(dict(zip(dfx.index,dfx.other))).T).fillna('')



    name age school subject
0   Alex        abc     xyz
1    Jin  10               
2         12    abc     xyz
3  Peter  13               

试试这个

df_final = dfx[['name','age']].assign(**pd.DataFrame(dfx.other.to_dict()).T)

Out[41]:
    name   age school subject
0   Alex   NaN    abc     xyz
1    Jin  10.0    NaN     NaN
2    NaN  12.0    abc     xyz
3  Peter  13.0    NaN     NaN

您可以使用.str.get访问器实际索引到列中的词典中。当单元格值为nan而不是字典时,也会返回nan

clean_df = (dfx
            .assign(
               school=lambda df: df["other"].str.get("school"),
               subject=lambda df: df["other"].str.get("subject"))
            .drop("other", axis=1))

print(clean_df)
    name   age school subject
0   Alex   NaN    abc     xyz
1    Jin  10.0    NaN     NaN
2    NaN  12.0    abc     xyz
3  Peter  13.0    NaN     NaN

相关问题 更多 >

    热门问题