Python处理JSON列数据后Pandas导出CSV仅输出单列问题咨询
问题原因和修复方案
问题原因
- 循环内重复覆盖DataFrame:每次遍历
res的行时,都会执行df=pd.DataFrame(s)直接覆盖之前的df对象,最终df只会保留最后一次循环生成的内容,所以打印和导出都只有少量数据。 - 重复覆盖导出文件:在嵌套的
enumerate(s)循环里反复调用df.to_csv('test.csv'),未指定追加模式,每次执行都会清空原有文件内容写入新内容,最终文件只剩最后一次写入的结果。 - 列表转DataFrame时格式错误:
s是split得到的一维列表,直接传入pd.DataFrame()时pandas会默认将每个元素作为行存储,所以只会生成1列(默认列名是0),不符合拆分为多列的需求。
修复代码
import pandas as pd # 初始化空列表存储所有行记录 all_data = [] for row in res: result = ''.join(row[0]) p = Payload(result) # 拆分words为列表 words_list = p.words.split("|") # 组装单条记录,可按需调整保留的字段 row_record = { "id": p.ID, "subject": p.subject } # 把拆分后的words逐个加入记录,字段名可自定义 for idx, word in enumerate(words_list): row_record[f"word_{idx+1}"] = word all_data.append(row_record) # 所有行处理完后统一生成DataFrame df = pd.DataFrame(all_data) # 统一导出csv,index=False取消导出默认的行号列 df.to_csv('test.csv', sep='\t', encoding='utf-8', index=False) # 导出excel取消下方注释即可 # writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter') # df.to_excel(writer, sheet_name='welcome', index=False) # writer.close()
补充说明
如果不同行的words拆分后长度不固定,pandas会自动给缺失的位置填充NaN值,不会影响正常导出。
内容的提问来源于stack exchange,提问作者d12
相关产品推荐
相关产品推荐

