如何将字典键值对分别追加为Python DataFrame的列?
解决方案
假设你的DataFrame名为df,存储字典的列名为dict_col,可以用以下代码实现需求:
import pandas as pd # 1. 将字典列拆分为键列表和值列表 def split_dict(row): items = list(row['dict_col'].items()) keys = [item[0] for item in items] values = [item[1] for item in items] return pd.Series([keys, values]) df[['keys', 'values']] = df.apply(split_dict, axis=1) # 2. 确定最大生成列组数(不超过300组) max_pairs = min(df['keys'].apply(len).max(), 300) # 3. 循环生成key_*和value_*列 for i in range(max_pairs): df[f'key_{i+1}'] = df['keys'].apply(lambda x: x[i] if i < len(x) else '') df[f'value_{i+1}'] = df['values'].apply(lambda x: x[i] if i < len(x) else '') # 4. 清理临时列(可选) df = df.drop(['dict_col', 'keys', 'values'], axis=1)
代码说明
- 第一步通过
apply将每行字典拆解为键、值两个列表,存入临时列用于后续处理。 - 第二步统计所有行的最大键值对数量,同时限制不超过300组,避免生成过多冗余列。
- 第三步按顺序生成成对的
key_n和value_n列,对长度不足的行填充空值,与你要求的输出格式完全匹配。 - 最后可删除临时列,保留原始数据列和生成的键值对列。
示例验证
用你提供的样本数据测试:
# 构造测试DataFrame data = { 'dict_col': [ {'a': 3, 'b': 2, 'c': 1}, {'d': 287, 'e': 56, 'f': 17, 'g': 9}, {'h': 22, 'i': 15, 'a': 7}, {'g': 17, 'd': 15, 'e': 15, 'f': 7, 'h': 15} ] } df = pd.DataFrame(data)
运行代码后,生成的列结构和内容将与你给出的示例完全一致。
内容的提问来源于stack exchange,提问作者Peter Park
相关产品推荐
相关产品推荐

