CSV中文乱码需用encoding='gbk'或chardet探测;groupby.agg()列名混乱应改用命名聚合;绘图中文不显要设font.sans-serif;大文件内存爆掉须用chunksize分批读取。
UnicodeDecodeError
Windows 默认用 gbk 编码保存文件,而 Python 3 的 pandas.read_csv() 默认尝试 utf-8,不匹配就直接报错。不是文件坏了,是编码没对上。
encoding='gbk' 或 encoding='gb2312',多数本地 Excel 另存为 CSV 后适用open() 手动探测:import chardet
with open('data.csv', 'rb') as f:
print(chardet.detect(f.read(10000)))结果里的 'encoding' 字段就是该用的值encoding='utf-8-sig',避免 BOM 被当普通字符读入df.groupby().agg() 返回列名丢失或嵌套层级混乱新版 pandas(1.3+)默认启用 observed=False 和多级索引折叠逻辑,agg() 若传入字典(如 {'sales': 'sum', 'qty': ['mean', 'count']}),输出列名会变成元组,reset_index() 后也不直观。
as_index=False 强制返回 DataFrame 而非 Seriescolumns = columns.map('_'.join) 展平多级列名(前提是 columns.nlevels > 1)df.groupby('region').agg(
total_sales=('sales', 'sum'),
avg_qty=('qty', 'mean')
)——列名清晰、无嵌套、兼容性好matplotlib 默认字体不支持中文,且 plt.xticks() / plt.xlabel() 中文若未设置字体,会显示方块;图表元素挤在一起则常因 figsize 过小或未调用 plt.tight_layout()。
import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS', 'DejaVu Sans'] plt.rcParams['axes.unicode_minus'] = False # 解决负号显示为方块
plt.show() 前加 plt.tight_layout(),或手动设 plt.subplots(figsize=(10, 6))
dpi=300 参数:plt.savefig('plot.png', dpi=300, bbox_inches='tight')
pd.read_csv() 加载大文件卡死不是代码写错了,是数据量超出了可用内存。常见于几千万行以上、含长文本或未清理空列的 CSV。
chunksize 分批处理:for chunk in pd.read_csv('big.csv', chunksize=50000): process(chunk) # 每次只进内存 5 万行
usecols 只读需要的列,避免加载冗余字段dtype(如 {'user_id': 'category', 'score': 'float32'}),能省 30%~70% 内存dask.dataframe 或 polars,它们天然惰性计算、内存友好实际项目里,编码、分组、绘图、内存这四类问题占了数据清洗和可视化阶段八成以上的阻塞点。真正难的往往不是“不会写”,而是报错信息没指向真实原因——比如 UnicodeDecodeError 看似编码问题,有时其实是文件末尾多了不可见的 BOM 或控制字符。多看前几十字节的原始二进制,比反复试 encoding 更快。