文章目录
一、环境准备篇(新手必看)
还在为Python环境发愁?老铁们直接安装Anaconda全家桶就完事了!(官网下载地址自己搜哈)装好之后这几个库必须检查:
- pandas(数据处理神器)
- matplotlib(画图必备)
- csv(系统自带不用装)
打开你的Jupyter Notebook(不会用的面壁去),新建个笔记本准备起飞~
二、CSV读取三大姿势(总有一款适合你)
方法1:原生csv模块
import csv
with open('sales_data.csv', 'r', encoding='utf-8') as f:
reader = csv.reader(f)
header = next(reader) # 读取表头
for row in reader:
print(row[0], row[3]) # 输出第一列和第四列
适用场景:小文件快速处理(超过10万行慎用!)
方法2:pandas大法好
import pandas as pd
# 这个参数能救命→ encoding='gbk' (遇到中文乱码时)
df = pd.read_csv('user_log.csv', parse_dates=['timestamp'])
print(df.head(3)) # 看前3行
print(df.describe()) # 统计摘要
优势:自动处理数据类型/日期格式/缺失值(香不香?)
方法3:numpy硬核读取
import numpy as np
data = np.genfromtxt('sensor_data.csv', delimiter=',', skip_header=1)
print(data[:, 1:3]) # 取第2-3列
适合:纯数值型数据处理(需要高性能计算时)
三、数据清洗黑科技(脏数据退散!)
读取只是开始,清洗才是重头戏!这些骚操作你必须会:
- 处理缺失值:
df.fillna(0, inplace=True) # 粗暴填充
df.dropna(subset=['price'], inplace=True) # 删除空值行
- 类型转换:
df['date'] = pd.to_datetime(df['date'], errors='coerce') # 强制转日期
df['price'] = df['price'].astype(float) # 转浮点数
- 过滤异常值:
# 剔除价格超过100万的离群点
df = df[df['price'] < 1e6]
四、可视化实战(老板最爱看这个!)
案例1:折线图(时间序列)
import matplotlib.pyplot as plt
plt.figure(figsize=(12,6))
plt.plot(df['date'], df['sales'], 'g--', linewidth=2)
plt.title('2023年销售趋势', fontproperties='SimHei') # 中文标题要设置字体!
plt.xlabel('日期')
plt.ylabel('销售额(万元)')
plt.grid(True)
plt.show()
案例2:散点图(相关性分析)
plt.scatter(df['age'], df['income'], c=df['gender'], alpha=0.5)
plt.colorbar(label='性别')
plt.savefig('age_vs_income.png', dpi=300) # 保存高清图
案例3:组合图表(装X必备)
fig, ax1 = plt.subplots()
ax1.bar(df['month'], df['sales'], color='skyblue')
ax1.set_ylabel('销售额', color='blue')
ax2 = ax1.twinx()
ax2.plot(df['month'], df['profit'], 'r-o')
ax2.set_ylabel('利润', color='red')
plt.title('销售 vs 利润双Y轴图')
五、避坑指南(血泪经验总结)
- 路径问题:
- 绝对路径 vs 相对路径(新手建议用绝对路径)
- Windows系统路径要写成
r'C:\data\file.csv'
- 编码问题:
- 中文文件尝试
encoding='gbk'
或'utf-8-sig'
- 终极解决方案:
chardet
库自动检测编码
- 内存爆炸:
- 大文件用
chunksize
参数分块读取
for chunk in pd.read_csv('big_data.csv', chunksize=10000):
process(chunk)
- 日期解析:
- 明确指定日期列
parse_dates=['order_date']
- 格式混乱时用
pd.to_datetime(df['date'], format='%Y/%m/%d')
六、性能优化小技巧
- 指定数据类型提速50%!
dtypes = {'id': 'int32', 'price': 'float32'}
pd.read_csv(..., dtype=dtypes)
- 只读取需要的列:
usecols = ['name', 'age', 'salary']
pd.read_csv(..., usecols=usecols)
- 使用category类型处理重复字符串:
df['city'] = df['city'].astype('category')
七、扩展应用(装X继续)
- 动态可视化:用
plotly
库生成交互图表 - 自动生成报告:
pandas_profiling
一键分析 - 定时任务:搭配
schedule
库实现自动更新图表
最后说两句
CSV看着简单,实际坑比Excel还多!(别问我怎么知道的)关键是要:
- 始终验证数据完整性
- 可视化前先做数据分布分析
- 养成保存中间结果的好习惯
代码写错了大不了重来,但要是用错误数据做了决策…(画面太美不敢想)所以各位,且行且珍惜吧!