使用Python Pandas格式化CSV:实现每8行数据合并为同一行
问题说明
待修复CSV文件设计为8列结构,但原始数据中每个字段单独占一行。已完成每行末尾追加逗号的操作,需要实现每8行合并为1行的效果,最终输出字段1,字段2,字段3,字段4,字段5,字段6,字段7,字段8格式的标准CSV。
原有代码仅完成了单行追加逗号的逻辑,未做按固定行数分组拼接的处理,直接调用pandas读取会将所有行识别为单列数据,无法达成需求。
实现代码
方案1:原生Python实现(无第三方依赖,推荐)
不需要依赖pandas,直接按行分组处理即可,逻辑可控不会出现CSV解析异常:
# 配置项 INPUT_FILE = "file.txt" OUTPUT_FILE = "Exported.csv" COLUMN_COUNT = 8 # 每8个字段合并为一行 # 读取并预处理原始行 with open(INPUT_FILE, "r", encoding="utf-8") as f: # 过滤空行,移除每行首尾空白、多余的末尾逗号 fields = [line.strip().rstrip(",") for line in f if line.strip()] # 按固定列数分组拼接 merged_lines = [] for idx in range(0, len(fields), COLUMN_COUNT): row = ",".join(fields[idx:idx+COLUMN_COUNT]) merged_lines.append(row) # 写入结果文件 with open(OUTPUT_FILE, "w", encoding="utf-8") as f: # 若需要添加表头,解开下一行注释替换为实际列名即可 # f.write("列1,列2,列3,列4,列5,列6,列7,列8\n") for line in merged_lines: f.write(f"{line}\n")
方案2:Pandas实现
如果后续需要做数据处理,可以直接在内存中把一维字段列表转为二维表结构再导出,不需要提前把逗号写回原文件:
import pandas as pd INPUT_FILE = "file.txt" OUTPUT_FILE = "Exported.csv" COLUMN_COUNT = 8 with open(INPUT_FILE, "r", encoding="utf-8") as f: fields = [line.strip().rstrip(",") for line in f if line.strip()] # 按8个字段一组切分为二维结构 table_data = [] for idx in range(0, len(fields), COLUMN_COUNT): table_data.append(fields[idx:idx+COLUMN_COUNT]) # 导出为CSV,不需要表头就把header参数设为False df = pd.DataFrame(table_data) df.to_csv(OUTPUT_FILE, index=False, header=False)
注意事项
- 运行前备份原始输入文件,避免覆盖导致数据丢失
- 编码参数根据文件实际编码调整,常见可选值为
utf-8、utf-8-sig、gbk,匹配错误会出现乱码 - 代码自动兼容末尾分组不足8个字段的场景,不会丢失尾部数据
- 如果需要输出标准带表头的CSV,直接在写入时追加表头行,或给Pandas的
columns参数传入列名列表即可
内容的提问来源于stack exchange,提问作者javier bravo
相关产品推荐
相关产品推荐

