还在手动整理 Excel?Python 帮你一键搞定
上周帮朋友做销售报表,她用了整整一天。
我接过文件,15 分钟搞定。
她问了我怎么做的。其实就是 5 个 Pandas 技巧。
今天全部分享出来。
技巧一:pd.read_csv 的 3 个隐藏参数
很多人读 CSV 只写 pd.read_csv('data.csv')。
其实这几个参数能省很多麻烦:
import pandas as pd
# 自动处理编码问题
df = pd.read_csv('data.csv', encoding='utf-8')
# 跳过前 3 行(很多 Excel 导出文件有标题行)
df = pd.read_csv('data.csv', skiprows=3)
# 指定某些列为日期格式,省得后面再转
df = pd.read_csv('data.csv', parse_dates=['date'])
实际场景:
朋友的报表有个日期列,格式是 ‘2026/8/12’ 而不是标准的 ‘2026-08-12’。用 parse_dates 直接指定,后面就不用手动转换了。
技巧二:dropna 不只是删空行
# 删掉所有含空值的行
df.dropna()
# 只删掉某几列有空值的行
df.dropna(subset=['销售额', '地区'])
# 把空值填充为 0(适合数值列)
df['销售额'] = df['销售额'].fillna(0)
# 按组填充(每个地区用自己的平均值填充)
df['销售额'] = df.groupby('地区')['销售额'].transform(
lambda x: x.fillna(x.mean())
)
实际场景:
某地区的销售额数据缺失,用该地区其他月份的均值来填充,比直接删掉更合理。
技巧三:groupby + agg 一次算完所有指标
# 传统写法:分组后一个个算
df_grouped = df.groupby('地区')['销售额'].sum()
df_count = df.groupby('地区')['销售额'].count()
# 一行搞定:同时算多个指标
result = df.groupby('地区')['销售额'].agg([
('总销售额', 'sum'),
('订单数', 'count'),
('平均订单', 'mean'),
('最高单笔', 'max'),
('最低单笔', 'min')
])
生成的 DataFrame 长这样:
| 地区 | 总销售额 | 订单数 | 平均订单 | 最高单笔 | 最低单笔 |
|---|---|---|---|---|---|
| 华北 | 128000 | 342 | 374.27 | 5200 | 12 |
| 华东 | 256000 | 689 | 371.55 | 8900 | 8 |
| 华南 | 189000 | 512 | 369.14 | 6500 | 15 |
时间节省: 原来要写 5 行,现在 1 行。
技巧四:pivot_table 做交叉分析
# 按地区和月份透视销售额
pivot = pd.pivot_table(
df,
values='销售额',
index='地区',
columns='月份',
aggfunc='sum',
fill_value=0
)
结果:
| 地区 | 1月 | 2月 | 3月 | 4月 | 5月 |
|---|---|---|---|---|---|
| 华北 | 12000 | 15000 | 18000 | 22000 | 25000 |
| 华东 | 35000 | 42000 | 48000 | 55000 | 61000 |
| 华南 | 28000 | 31000 | 36000 | 42000 | 47000 |
实际场景:
做季度销售分析时,这个表格比原始数据直观多了。直接复制到 Excel 或导出成 HTML,汇报时直接用。
技巧五:to_excel 导出带格式的报表
# 基础导出
df.to_excel('report.xlsx', index=False)
# 高级导出:指定 sheet 名、样式
with pd.ExcelWriter('report.xlsx', engine='openpyxl') as writer:
pivot.to_excel(writer, sheet_name='区域分析')
detail.to_excel(writer, sheet_name='明细数据', index=False)
# 设置列宽
worksheet = writer.sheets['区域分析']
worksheet.column_dimensions['A'].width = 12
for col in range(2, 8):
worksheet.column_dimensions[chr(64 + col)].width = 10
关键点:
- 用
openpyxl引擎才能设置格式 ExcelWriter可以写多个 sheet- 列宽设好,导出后不用手动调
完整示例:从原始数据到报表
import pandas as pd
# 1. 读数据
df = pd.read_csv('sales.csv', parse_dates=['date'])
# 2. 清洗
df = df.dropna(subset=['销售额'])
df['月份'] = df['date'].dt.month
# 3. 分组统计
summary = df.groupby('地区')['销售额'].agg([
('总销售额', 'sum'),
('订单数', 'count'),
('平均订单', 'mean')
]).round(2)
# 4. 透视表
pivot = pd.pivot_table(
df, values='销售额',
index='地区', columns='月份',
aggfunc='sum', fill_value=0
)
# 5. 导出
with pd.ExcelWriter('月度报表.xlsx') as writer:
summary.to_excel(writer, sheet_name='汇总')
pivot.to_excel(writer, sheet_name='月度趋势')
这段代码处理完,报表就出来了。
总结
| 技巧 | 解决的问题 |
|---|---|
| read_csv 参数 | 编码、格式、跳过行 |
| dropna 用法 | 缺失值处理 |
| groupby + agg | 多维度统计 |
| pivot_table | 交叉分析 |
| ExcelWriter | 格式导出 |
学会这 5 个,日常 80% 的数据处理都能搞定。
你平时最头疼的数据处理问题是什么?评论区聊聊。