Pandas:如何拆分字典中的列表并生成新列
拆分DataFrame中列表列的解决方案
现有中间结果
经过你之前的代码处理后,得到的DataFrame如下:
A opt_X opt_Y 1 Room1 ['A1','A2'] 2 Room2 ['B1', 'B2','B3']
完成剩余拆分的代码
直接执行以下代码即可将opt_Y列的列表拆分为多列,并填充长度不足的位置为0:
# 将opt_Y的列表转为DataFrame,缺失值补0 y_split = pd.DataFrame(df['opt_Y'].tolist(), index=df.index).fillna(0) # 给拆分后的列重命名为opt_Y_1、opt_Y_2... y_split.columns = [f'opt_Y_{col+1}' for col in y_split.columns] # 合并到原DataFrame,删除原opt_Y列 df = df.join(y_split).drop('opt_Y', axis=1)
整合完整流程代码
如果要从原始DataFrame一步到位,完整代码如下:
import pandas as pd # 原始DataFrame df = pd.DataFrame({ 'A': [1, 2], 'B': [[{'X': 'Room1', 'Y': ['A1', 'A2']}], [{'X': 'Room2', 'Y': ['B1', 'B2','B3']}]] }) # 第一步:解析B列的字典 L = [pd.json_normalize(x) for x in df.pop('B')] df = df.join(pd.concat(L, ignore_index=True, sort=False).add_prefix('opt_')) # 第二步:拆分opt_Y的列表列 y_split = pd.DataFrame(df['opt_Y'].tolist(), index=df.index).fillna(0) y_split.columns = [f'opt_Y_{col+1}' for col in y_split.columns] df = df.join(y_split).drop('opt_Y', axis=1) # 查看结果 print(df)
执行后得到目标结果:
A opt_X opt_Y_1 opt_Y_2 opt_Y_3 1 Room1 A1 A2 0 2 Room2 B1 B2 B3
内容的提问来源于stack exchange,提问作者bawa_91
相关产品推荐
相关产品推荐

