用Python玩转CSV文件:从数据读取到可视化全攻略(附踩坑指南)

一、环境准备篇(新手必看)

还在为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列

适合:纯数值型数据处理(需要高性能计算时)

三、数据清洗黑科技(脏数据退散!)

读取只是开始,清洗才是重头戏!这些骚操作你必须会:

  1. 处理缺失值:
df.fillna(0, inplace=True)  # 粗暴填充
df.dropna(subset=['price'], inplace=True)  # 删除空值行
  1. 类型转换:
df['date'] = pd.to_datetime(df['date'], errors='coerce')  # 强制转日期
df['price'] = df['price'].astype(float)  # 转浮点数
  1. 过滤异常值:
# 剔除价格超过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轴图')

五、避坑指南(血泪经验总结)

  1. 路径问题:
  • 绝对路径 vs 相对路径(新手建议用绝对路径)
  • Windows系统路径要写成r'C:\data\file.csv'
  1. 编码问题:
  • 中文文件尝试encoding='gbk''utf-8-sig'
  • 终极解决方案:chardet库自动检测编码
  1. 内存爆炸:
  • 大文件用chunksize参数分块读取
for chunk in pd.read_csv('big_data.csv', chunksize=10000):
    process(chunk)
  1. 日期解析:
  • 明确指定日期列parse_dates=['order_date']
  • 格式混乱时用pd.to_datetime(df['date'], format='%Y/%m/%d')

六、性能优化小技巧

  1. 指定数据类型提速50%!
dtypes = {'id': 'int32', 'price': 'float32'}
pd.read_csv(..., dtype=dtypes)
  1. 只读取需要的列:
usecols = ['name', 'age', 'salary']
pd.read_csv(..., usecols=usecols)
  1. 使用category类型处理重复字符串:
df['city'] = df['city'].astype('category')

七、扩展应用(装X继续)

  • 动态可视化:用plotly库生成交互图表
  • 自动生成报告:pandas_profiling一键分析
  • 定时任务:搭配schedule库实现自动更新图表

最后说两句

CSV看着简单,实际坑比Excel还多!(别问我怎么知道的)关键是要:

  1. 始终验证数据完整性
  2. 可视化前先做数据分布分析
  3. 养成保存中间结果的好习惯

代码写错了大不了重来,但要是用错误数据做了决策…(画面太美不敢想)所以各位,且行且珍惜吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值