手把手教你用pandas优雅读取CSV文件(实战干货!)

为什么你的CSV读取方式该升级了?

还在用Python原生csv模块吭哧吭哧读数据?(太原始啦!)pandas的read_csv()方法才是数据处理界的瑞士军刀!这个不到1秒就能把CSV变DataFrame的神器,今天必须把它的裤衩都扒干净!

一、基础必杀技(建议全文背诵)

1.1 基本食用姿势

import pandas as pd

# 最简写法(文件路径记得加r!)
df = pd.read_csv(r'D:\data\sales.csv')

# 查看前3行(默认显示5行太占地方)
print(df.head(3))

1.2 参数黑魔法(超实用!)

参数名作用说明典型场景
sep指定分隔符(默认逗号)处理TSV文件:sep=‘\t’
header指定标题行(默认第0行)无表头文件:header=None
names自定义列名重命名乱码的列名
dtype强制指定列类型防止手机号变成科学计数法
parse_dates日期解析自动转换日期格式
skiprows跳过指定行跳过文件开头的注释行

二、实战中的骚操作

2.1 处理百万级大文件

# 分块读取(内存杀手克星!)
chunk_size = 100000
chunks = pd.read_csv('big_data.csv', chunksize=chunk_size)

for chunk in chunks:
    process(chunk)  # 你的处理函数

2.2 智能类型推断(超智能!)

# 自动检测日期列(识别50+种日期格式!)
df = pd.read_csv('log.csv', infer_datetime_format=True)

# 强制字符串读取(防止前导零丢失!)
df = pd.read_csv('product.csv', dtype={'产品编号': str})

三、避坑指南(血泪经验)

3.1 编码问题大全

# 常见编码尝试顺序(遇到乱码时挨个试!)
encodings = ['utf-8', 'gbk', 'gb2312', 'latin1']

for enc in encodings:
    try:
        df = pd.read_csv('神秘文件.csv', encoding=enc)
        break
    except:
        continue

3.2 缺失值处理技巧

# 多种缺失值标记(小心隐藏的空值!)
df = pd.read_csv('dirty_data.csv', 
                na_values=['NA', 'null', '--', 'NaN', ''])

# 保留特定空值(比如合法的"N/A"字段)
df = pd.read_csv('survey.csv', 
                keep_default_na=False, 
                na_values=[''])

四、高阶玩法(秀到飞起)

4.1 正则表达式读取

# 用正则处理变态分隔符(什么鬼格式都能吃!)
df = pd.read_csv('weird_format.csv', 
                sep='\s*[,|]\s*',  # 匹配逗号或竖线
                engine='python')

4.2 在线文件直读(不用下载!)

import requests

url = 'http://data.com/api/download.csv'
df = pd.read_csv(requests.get(url).content.decode('utf-8'))

五、性能优化(速度提升10倍!)

5.1 指定列读取(拒绝无用数据)

# 只读取需要的列(内存立即瘦身!)
cols_needed = ['name', 'price', 'date']
df = pd.read_csv('large.csv', usecols=cols_needed)

5.2 使用C引擎

# 默认是C引擎(比python引擎快2-5倍!)
df = pd.read_csv('data.csv', engine='c')

# 处理超大文件建议开启low_memory模式
df = pd.read_csv('huge.csv', low_memory=False)

六、Debug神技(建议收藏)

当read_csv()报错时,按这个顺序检查:

  1. 文件路径是否正确(绝对路径前加r!)
  2. 编码是否正确(尤其中文文件!)
  3. 分隔符是否匹配(用pd.parser.csv_sniff检测)
  4. 是否存在不一致的列数
  5. 内存是否不足(尝试分块读取)

举个实战案例:

from pandas.errors import ParserError

try:
    df = pd.read_csv('problem.csv')
except ParserError as e:
    print(f"第{e.row}行有问题!具体错误:{e.msg}")
    # 自动跳过错误行
    df = pd.read_csv('problem.csv', error_bad_lines=False)

七、冷知识(装逼用)

  • read_csv()可以直读压缩包文件(自动解压.zip/.gz)
  • 支持从剪贴板读取数据(pd.read_clipboard())
  • 可以处理带HTML实体的数据( 等自动转换)
  • 支持指定十进制格式(欧洲数据常用,decimal=‘,’)
# 读取德国格式的CSV(逗号小数点)
df = pd.read_csv('german_data.csv', decimal=',')

最后的大杀器

把read_csv参数写成配置字典,一劳永逸!

csv_config = {
    'sep': ';',
    'encoding': 'gbk',
    'parse_dates': ['下单时间'],
    'dtype': {'用户ID': 'str'},
    'na_values': ['未知']
}

df = pd.read_csv('daily_data.csv', **csv_config)

看完这篇还搞不定CSV文件?建议你…再看一遍!(毕竟pandas有100+个参数呢)下次遇到奇葩CSV时,记得回来查这个宝典!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值