如何将Pandas DataFrame逐行转换为键值对列表?
将Pandas DataFrame转换为行级键值对列表的最优方法
方法一:简洁逐行转换(适合小数据集)
先构造示例DataFrame:
import pandas as pd df = pd.DataFrame({ 'col1': ['a', 'b', 'c', 'd'], 'col2': ['tom', 'jay', 'harsh', 'ras'], 'col3': [90, 75, 35, 50], 'col4': ['Good', 'Not so good', 'Bad', 'impresive'] })
直接用apply结合列表推导式,按行生成目标键值对列表:
# 生成每行对应的键值对列表,最终结果为一个大列表 result = df.apply(lambda row: [{'key': col, 'value': row[col]} for col in df.columns], axis=1).tolist()
输出result[0]即可得到第一行的目标结构:
[ {'key':'col1', 'value':'a'}, {'key':'col2', 'value':'tom'}, {'key':'col3', 'value':90}, {'key':'col4', 'value':'Good'} ]
方法二:向量化分组转换(适合大数据集)
如果处理的是大规模数据,推荐用melt+分组的方式,性能更优:
# 将DataFrame转成长格式,保留原行索引 melted_df = df.reset_index().melt(id_vars='index', var_name='key', value_name='value') # 按行索引分组,每组转换为字典列表 result = melted_df.groupby('index')[['key', 'value']].apply(lambda x: x.to_dict('records')).tolist()
这种方法通过向量化操作避免逐行循环,在数据量较大时效率明显高于第一种方法。
结果验证
两种方法最终得到的result结构完全匹配需求:大列表中的每个元素对应原DataFrame的一行,每行是由列名-值组成的字典列表。
内容的提问来源于stack exchange,提问作者Istiyak Shaikh
相关产品推荐
相关产品推荐

