如何将含DataFrame的字典转为目标DataFrame?解决pd.DataFrame转换失败问题
解决字典转DataFrame实现行拼接的问题
问题原因
直接用pd.DataFrame(dic_1)会将字典的键作为列名,每个列对应原字典中的DataFrame对象,最终生成带多层列结构的DataFrame,这和val_1.append(val_2)的行拼接需求完全不符。
正确实现方法
方法1:使用pd.concat实现行拼接(推荐)
pd.concat是Pandas官方推荐替代append的方法(append已被标记为弃用),只需提取字典的所有值并传入即可:
import pandas as pd val_1 = pd.DataFrame({'category':['a','b'],'amount':[1,3]}) val_2 = pd.DataFrame({'category':['d','e'],'amount':[4,7]}) dic_1 ={'v01':val_1,'v02':val_2} # 实现与val_1.append(val_2)完全一致的结果 result = pd.concat(dic_1.values(), ignore_index=True) print(result)
输出结果:
category amount 0 a 1 1 b 3 2 d 4 3 e 7
ignore_index=True用于重置合并后的行索引,和append默认行为一致;如果需要保留原索引可去掉该参数。
方法2:保留来源标记(可选)
如果需要知道每行数据来自字典的哪个键,可以通过keys参数添加层级索引:
result_with_source = pd.concat(dic_1, names=['data_source', 'original_index']) print(result_with_source)
输出结果:
category amount data_source original_index v01 0 a 1 1 b 3 v02 0 d 4 1 e 7
若要移除层级索引,可后续调用reset_index():
result_flattened = result_with_source.reset_index(drop=True)
内容的提问来源于stack exchange,提问作者anderwyang
相关产品推荐
相关产品推荐

