文章目录
一、为什么要用Python处理CSV?(你可能不知道的隐藏优势)
还在用Excel手动处理表格数据吗?兄弟你out了!(敲黑板)Python处理CSV文件有三大必杀技:
- 批量处理100万行数据只要3秒(Excel早卡死了!)
- 自动清洗脏数据的神操作(正则表达式YYDS)
- 可视化直接生成高清大图(PPT都不用开了)
二、读取CSV的N种姿势(总有一款适合你)
2.1 基础版:csv模块(适合小文件)
import csv
with open('data.csv', 'r', encoding='utf-8') as f:
reader = csv.reader(f)
header = next(reader) # 提取表头(重要!)
for row in reader:
print(row[0]) # 输出第一列数据
⚠️注意:文件路径要用原始字符串!比如 r'C:\data\test.csv'
(不然斜杠会搞事情)
2.2 进阶版:pandas(打工人必备)
import pandas as pd
df = pd.read_csv('data.csv',
sep=',', # 分隔符(遇到tsv文件改\t)
header=0, # 指定表头行
na_values=['NA']) # 定义缺失值
print(df.describe()) # 瞬间生成统计摘要!
2.3 避坑指南(血泪教训总结)
- 编码问题:遇到乱码先试
encoding='gbk'
(特别是中文文件) - 内存爆炸:大文件用
chunksize=1000
分块读取(拯救你的8G内存) - 日期解析:
parse_dates=['日期列']
自动转换时间格式(别再用字符串硬刚了!)
三、数据可视化实战(让老板眼前一亮的技巧)
3.1 Matplotlib基础绘图
import matplotlib.pyplot as plt
plt.plot(df['日期'], df['销售额'],
linestyle='--', # 虚线
marker='o', # 数据点标记
color='#FF6347') # 番茄红色
plt.title('2023销售趋势', fontsize=14)
plt.xticks(rotation=45) # X轴标签旋转(防重叠!)
plt.savefig('sales.png', dpi=300) # 保存高清图
3.2 Seaborn高级玩法
import seaborn as sns
sns.set(style='whitegrid') # 设置主题(逼格瞬间提升)
g = sns.FacetGrid(df, col='地区') # 按地区分面绘图
g.map(sns.lineplot, '月份', '销量')
g.add_legend() # 添加图例
plt.tight_layout() # 自动调整布局(防元素重叠)
3.3 可视化常见翻车现场
- 中文乱码:提前设置
plt.rcParams['font.sans-serif'] = ['SimHei']
- 图片模糊:保存时设置
dpi=300
以上(打印必备) - 颜色灾难:使用
sns.color_palette('pastel')
柔色系(告别荧光色)
四、高级技巧:数据清洗自动化(价值10W的经验)
4.1 处理缺失值的骚操作
# 删除缺失超过50%的列
df = df.dropna(thresh=len(df)*0.5, axis=1)
# 用前后值填充(适合时间序列)
df.fillna(method='ffill', inplace=True)
4.2 重复数据处理三连击
# 方法1:暴力去重
df.drop_duplicates(inplace=True)
# 方法2:条件去重(保留最新记录)
df.sort_values('时间').drop_duplicates('用户ID', keep='last')
# 方法3:模糊匹配去重(用fuzzywuzzy库)
from fuzzywuzzy import process
matches = process.dedupe(df['姓名'], threshold=90)
五、实战案例:电商数据分析全流程(手把手教学)
假设我们有一个 orders.csv
包含:
- 订单ID
- 用户ID
- 下单时间
- 订单金额
- 商品类别
# 完整处理流程
df = pd.read_csv('orders.csv')
df['下单时间'] = pd.to_datetime(df['下单时间']) # 转换时间格式
# 按周聚合数据
weekly_sales = df.resample('W', on='下单时间')['订单金额'].sum()
# 绘制热力图
pivot_table = df.pivot_table(index=df['下单时间'].dt.hour,
columns=df['下单时间'].dt.dayofweek,
values='订单金额',
aggfunc='sum')
sns.heatmap(pivot_table, cmap='YlGnBu')
六、常见问题Q&A(遇到问题先看这里)
Q:为什么我的折线图断断续续?
A:八成是数据有缺失!先用 df.isnull().sum()
查缺失值
Q:读取10G超大文件直接内存爆炸怎么办?
A:试试这两个方案:
- 使用
dask
库进行分布式读取 - 改用数据库(比如SQLite)暂存数据
Q:怎么把图片嵌入到Excel里?
A:用 openpyxl
库的 add_image()
方法(比手动操作快10倍!)
下次遇到CSV文件时,别再复制粘贴了!(拍肩)把这些代码片段保存好,工作效率直接翻倍。如果遇到奇葩数据问题,欢迎评论区扔过来——见招拆招我最擅长了!