嵌套字典转CSV:多表导出报错及解决方案咨询
问题修复方案
错误原因
你调用pd.DataFrame.to_csv()时未传入文件名参数,该方法默认会返回CSV格式的字符串,而非直接保存文件。你误将返回的字符串当作文件名使用,导致系统把CSV内容识别为无效的文件路径,从而抛出Errno 22错误。
分表导出CSV
以下代码可将每个表单独导出为CSV文件,自动处理扁平行数据的拆分:
import pandas as pd # 替换为你的原始数据字典 data_dict = { 'Numero contatti creati': [ ['brand', 'count', 'countLastMonth'], ['app IO', '1', '0', 'pagoPA', '2', '0'] ], 'Risposte totali': [ ['Field', 'Responses'], ['Data registrata', '2'] ] } for table_name, table_data in data_dict.items(): # 获取列标题与列数 columns = table_data[0] num_cols = len(columns) # 将扁平的行数据拆分为多行 row_list = table_data[1] rows = [row_list[i:i+num_cols] for i in range(0, len(row_list), num_cols)] # 生成DataFrame并保存 df = pd.DataFrame(rows, columns=columns) # 处理文件名,避免特殊字符导致路径错误 filename = f"{table_name.replace(' ', '_')}.csv" df.to_csv(filename, index=False)
合并为单个CSV
若需要将所有表合并到一个CSV文件中,可添加table_name列区分数据所属表:
import pandas as pd data_dict = { 'Numero contatti creati': [ ['brand', 'count', 'countLastMonth'], ['app IO', '1', '0', 'pagoPA', '2', '0'] ], 'Risposte totali': [ ['Field', 'Responses'], ['Data registrata', '2'] ] } combined_dfs = [] for table_name, table_data in data_dict.items(): columns = table_data[0] num_cols = len(columns) row_list = table_data[1] rows = [row_list[i:i+num_cols] for i in range(0, len(row_list), num_cols)] df = pd.DataFrame(rows, columns=columns) df['table_name'] = table_name # 添加表名标识列 combined_dfs.append(df) # 合并所有表并保存 final_df = pd.concat(combined_dfs, ignore_index=True) final_df.to_csv('combined_tables.csv', index=False)
关键修复点
- 调用
to_csv()时必须传入文件名参数,例如to_csv('output.csv'),而非直接调用to_csv(); - 动态获取列数(
len(columns))替代手动指定列数,提升代码通用性; - 添加
index=False参数,避免保存pandas默认的索引列,让CSV输出更简洁。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

