Pandas按日期分组拼接字符串后导出CSV格式异常问题
分组拼接字符串导出CSV格式异常修复
问题场景
初始DataFrame数据:
date str 2020-01-11 17:16:09+00:00 aa 2020-01-11 17:16:09+00:00 a 2020-01-11 17:16:09+00:00 a 2020-01-19 17:16:09+00:00 bb 2020-01-19 17:16:09+00:00 bb 2020-01-19 17:16:09+00:00 b
尝试通过分组拼接字符串后导出为CSV:
df = df.groupby('date', as_index=False)['str'].apply(' '.join) df = pd.DataFrame(df) for index, row in df.iterrows(): date = str(row['date']).replace('-', '_') filename = f'{date}.csv' with open(filename, 'w', encoding="utf-8-sig") as file: file.write(row['str'])
期望结果:每个CSV文件内是单行拼接文本(如2020-01-11.csv内容为aa a a)。
实际异常:文件内容按原元素换行显示:
2020-01-11.csv aa a a
原因分析
- 分组拼接逻辑错误:
groupby(..., as_index=False)['str'].apply(' '.join)未正确将组内字符串拼接为单个字符串,反而返回了可迭代对象,导致写入时自动拆分换行。 - 原始字符串含隐藏格式:初始
str列元素可能带有换行符(\n)或未清理的换行标记,即使拼接后仍会触发换行。
解决方法
1. 修正分组拼接代码
使用agg替代apply,确保组内字符串被正确拼接为单个字符串:
# 正确的分组拼接方式 df_grouped = df.groupby('date', as_index=False)['str'].agg(' '.join)
2. 清理原始字符串格式
提前去除str列中的换行符和多余空格:
# 清理字符串:去掉换行符,首尾去空格 df['str'] = df['str'].str.replace('\n', '').str.strip() # 再执行分组拼接 df_grouped = df.groupby('date', as_index=False)['str'].agg(' '.join)
3. 优化文件写入逻辑
确保写入的是完整拼接字符串,同时可按需简化文件名中的日期格式:
for _, row in df_grouped.iterrows(): # 提取日期部分(移除时分秒和时区) date_part = row['date'].split(' ')[0] filename = f'{date_part.replace("-", "_")}.csv' with open(filename, 'w', encoding="utf-8-sig") as f: f.write(row['str'])
完整可运行代码
import pandas as pd # 构造初始数据 data = { 'date': ['2020-01-11 17:16:09+00:00']*3 + ['2020-01-19 17:16:09+00:00']*3, 'str': ['aa', 'a ', 'a ', 'bb ', 'bb ', 'b '] } df = pd.DataFrame(data) # 清理字符串格式 df['str'] = df['str'].str.strip() # 分组拼接 df_grouped = df.groupby('date', as_index=False)['str'].agg(' '.join) # 导出为单个CSV文件 for _, row in df_grouped.iterrows(): date_part = row['date'].split(' ')[0] filename = f'{date_part.replace("-", "_")}.csv' with open(filename, 'w', encoding="utf-8-sig") as f: f.write(row['str'])
内容的提问来源于stack exchange,提问作者Diana Mele
相关产品推荐
相关产品推荐

