CSV保存失败主因有四:①Windows下Excel默认读gbk或utf-8-sig,须用encoding='utf-8-sig';②含换行符/逗号字段需清洗或quoting=csv.QUOTE_ALL;③大数据量应分块追加写入防OOM;④时间字段须统一转datetime64并处理时区。
CSV保存失败:pandas
报错
中文或特殊字符写入 CSV 时,
默认用
编码,但 Windows 下 Excel 默认读取
或带 BOM 的
,直接双击打开就乱码或报错。
实操建议:
Python 3.14.3
微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。
下载
Windows 环境下务必显式指定
,这是最稳妥的兼容方案
避免用
—— 遇到 emoji、繁体字、数学符号会直接抛
如果后续只用 Python 读(比如再用
),
没问题;但只要有人用 Excel 打开,就必须
示例:
字段含换行符或逗号:CSV 格式被破坏
爬虫
抓到的文本常含
、
或英文逗号(如地址、简介),不处理会导致 CSV 行数错乱、列偏移,Excel 里整行“塌”成一列。
立即学习
“
Python免费学习笔记(深入)
”;
实操建议:
pandas 默认用双引号包裹含特殊字符的字段(
),但前提是字段是字符串类型;如果字段是
或数字,不会自动加引号
提前清洗:用
替换掉危险字符(注意保留原意的前提下)
更安全的做法是强制所有字符串字段加引号:
,需先
数据量大时卡死或内存爆掉
一次性把几百万行 DataFrame 全塞进内存再调
,容易触发 OOM,尤其在低配机器或云函数环境。
实操建议:
别等全部爬完再存 —— 边爬边存,用
追加写入(首次需手动写 header)
控制 chunk 大小:每抓 1000 条就
,
初始为
,之后设为
避免反复打开/关闭文件句柄;用
手动管理文件对象 +
更可控
时间字段变成数字或时区错乱
爬到的日期字符串(如
)若没转成
类型,
会原样输出;但若用了
却忽略时区,可能存成 UTC 时间戳,和原始本地时间对不上。
实操建议:
入库前统一转类型:
,
把非法值变
而非报错
保存时不强制转时间戳 ——
默认把
输出为可读字符串(如
),除非你设了
若原始数据有时区(如
),转完后用
去时区,避免 Excel 误解析
真正麻烦的不是语法,而是你永远不知道网页里藏了多少种日期格式、空格变体、不可见控制符——多加一行
快速探查,比硬试强得多。
to_csv()UnicodeEncodeErrorto_csv()'utf-8'gbkutf-8-sigencoding='utf-8-sig'encoding='gbk'UnicodeEncodeErrorpandas.read_csv()encoding='utf-8'utf-8-sigdf.to_csv('data.csv', encoding='utf-8-sig', index=False)\n\rquoting=csv.QUOTE_MINIMALNonedf[cols] = df[cols].astype(str).str.replace(r'[\r\n,]', ' ', regex=True)df.to_csv(..., quoting=csv.QUOTE_ALL)import csvto_csv()mode='a'pd.DataFrame(chunk_list).to_csv(..., mode='a', header=first_write, index=False)first_writeTrueFalseopen(...)df.to_csv(f, ...)"2024-05-20 14:30:00"datetime64to_csv()parse_datesdf['pub_time'] = pd.to_datetime(df['pub_time'], errors='coerce')errors='coerce'NaTto_csv()datetime642024-05-20 14:30:00date_format"2024-05-20 14:30:00+08:00".dt.tz_localize(None)df.applymap(type)