Pandas导出CSV时将DataFrame表头设为文件第一行问题咨询
错误原因说明
pd.concat报错的根源:你用df.loc[0,:]取出来的是Series类型,pd.concat要求第一个参数必须是可迭代的pandas对象集合(通常是列表),而且手动拼接表头行属于冗余操作,完全不需要这么做。to_csv/to_excel的header参数使用错误:该参数设为True(默认值)时,就会自动把DataFrame的列名(也就是你读取时设置的原Excel首行表头)作为导出文件的第一行,完全符合你要和原文件结构一致的需求。你之前设置为None或者0反而会关闭表头输出,自然达不到效果。
最简实现代码
导出为CSV文件
import pandas as pd # 读取Excel,原文件首行直接设为DataFrame列名 df = pd.read_excel(r'C:\Users\dusti\Desktop\bulk export.xlsx', sheet_name=0, header=0) # 直接导出即可,header=True默认输出列名为文件第一行,和原结构完全一致 df.to_csv(r'C:\Users\dusti\Desktop\bulk export.csv', index=False, header=True)
导出为Excel文件
import pandas as pd df = pd.read_excel(r'C:\Users\dusti\Desktop\bulk export.xlsx', sheet_name=0, header=0) df.to_excel(r'C:\Users\dusti\Desktop\bulk export1.xlsx', index=False, header=True)
特殊场景处理(列名转第一行数据)
如果你确实需要把列名作为普通数据行插入到表格最前面,导出时不显示额外表头,写法如下:
import pandas as pd df = pd.read_excel(r'C:\Users\dusti\Desktop\bulk export.xlsx', sheet_name=0, header=0) # 将列名转为一行DataFrame header_row = pd.DataFrame([df.columns], columns=df.columns) # 拼接表头行和原数据,注意concat第一个参数要放在列表里 df = pd.concat([header_row, df], ignore_index=True) # 导出时关闭表头输出,此时第一行就是原表头内容 df.to_csv(r'C:\Users\dusti\Desktop\bulk export.csv', index=False, header=None)
内容的提问来源于stack exchange,提问作者ah2Bwise
相关产品推荐
相关产品推荐

