如何用Python将含字典的列表转换为指定格式的CSV表格?
解决方法
你的数据结构需要先按列合并字典,再通过Series对齐行号,最后组合成DataFrame,具体步骤如下:
1. 数据预处理:合并每列的字典
每个内层列表对应一列,里面的多个字典需要合并成一个以行号为键的完整字典,保留行号信息。比如第一列[{0:"title1"},{1:"title2"}]合并后为{0: "title1", 1: "title2"}。
2. 转换为Series并合并成DataFrame
将每个合并后的字典转为Pandas Series(自动以字典的键为索引,也就是行号),然后把所有Series按列拼接,Pandas会自动对齐行号,缺失的位置填充NaN。
完整代码示例
import pandas as pd # 你的原始数据 data = [[{0:"title1"},{1:"title2"}],[{0:"data1"},{1:"data2"}],[{1:"more data2"}]] # 处理每一列:合并该列的所有字典 processed_cols = [] for col in data: col_dict = {} for d in col: col_dict.update(d) processed_cols.append(pd.Series(col_dict)) # 合并为DataFrame,行号自动对齐 df = pd.concat(processed_cols, axis=1) # 导出为CSV df.to_csv("output.csv", index_label="行号")
输出结果说明
生成的CSV内容如下:
行号,0,1,2 0,title1,data1,NaN 1,title2,data2,more data2
这样就严格按照行号匹配,列和行的对应关系完全符合需求。
为什么直接用DataFrame会失败?
直接将原始数据传入pd.DataFrame()时,Pandas会把外层列表的每个子列表当作行而非列,同时每个字典会被解析为单独的行记录,默认使用位置索引(0,1,2...)而非字典的键,因此丢失了行号匹配的逻辑,得到不符合预期的结果。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

