pandas.read_csv()的详解-ChatGPT4o作答
发布日期:2025-05-01 20:40:33 浏览次数:2 分类:技术文章

本文共 2979 字,大约阅读时间需要 9 分钟。

pandas.read_csv() 是 pandas 中最常用的函数之一,用于从 CSV(Comma-Separated Values)文件读取数据并加载为 DataFrame。以下是 read_csv 的详细解析,包括参数、用法和常见问题。


基本语法

import pandas as pddata = pd.read_csv(filepath, **kwargs)
  • filepath: 文件路径,支持本地路径或 URL。

主要参数详解

1. 数据分隔

sep: 指定分隔符(默认 ','
  • 用于指定文件中列之间的分隔符。
  • 默认是逗号(,),可以更改为其他分隔符,如制表符(\t)或空格。
data = pd.read_csv('data.csv', sep=',')  # 默认分隔符是逗号data = pd.read_csv('data.tsv', sep='\t')  # 使用制表符data = pd.read_csv('data.txt', sep=' ')  # 使用空格分隔

2. 文件编码

encoding: 文件编码格式
  • 默认使用 utf-8,但文件可能是其他编码格式。
  • 常见编码:
    • latin1ISO-8859-1:处理西欧语言。
    • gbk:用于中文文件。
data = pd.read_csv('data.csv', encoding='utf-8')data = pd.read_csv('data.csv', encoding='gbk')

3. 处理缺失值

na_values: 指定哪些值视为缺失值
  • 默认将 NaN、空字符串等视为缺失值。
  • 可以指定更多的缺失值表示形式,例如 -1NULL
data = pd.read_csv('data.csv', na_values=['NULL', '-1'])
keep_default_na: 是否保留默认的缺失值识别
  • 默认是 True,如果想仅使用 na_values 指定的值作为缺失值,设置为 False
data = pd.read_csv('data.csv', na_values=['None'], keep_default_na=False)

4. 指定行与列

usecols: 选择读取的列
  • 提供列名列表或列索引列表,仅读取指定的列。
data = pd.read_csv('data.csv', usecols=['col1', 'col2'])data = pd.read_csv('data.csv', usecols=[0, 1])  # 按列索引选择
skiprows: 跳过前几行
  • 可跳过文件的指定行数(或行列表)。
data = pd.read_csv('data.csv', skiprows=2)  # 跳过前两行data = pd.read_csv('data.csv', skiprows=[0, 2])  # 跳过第0行和第2行

5. 索引

index_col: 指定哪一列作为索引
  • 通过列名或列索引指定。
data = pd.read_csv('data.csv', index_col='id')data = pd.read_csv('data.csv', index_col=0)  # 第一列作为索引

6. 数据类型

dtype: 强制指定列的数据类型
  • 默认会自动推断数据类型,但可以显式指定。
data = pd.read_csv('data.csv', dtype={
'col1': int, 'col2': float})

7. 处理行数

nrows: 读取前几行
  • 仅读取文件的前 n 行。
data = pd.read_csv('data.csv', nrows=100)  # 读取前100行
chunksize: 按块读取
  • 以块为单位读取大文件,每次读取固定行数。
chunk_iter = pd.read_csv('data.csv', chunksize=1000)for chunk in chunk_iter:    print(chunk.head())

8. 处理列名

header: 指定列名行
  • 默认 header=0(第一行作为列名)。
  • 如果文件没有列名,设置 header=None
data = pd.read_csv('data.csv', header=0)  # 第一行是列名data = pd.read_csv('data.csv', header=None, names=['col1', 'col2', 'col3'])  # 自定义列名

9. 其他常用参数

  • delimiter: 同 sep,用于指定分隔符。
  • quotechar: 指定引用字符(默认 '"'),用于识别包含分隔符的字符串。
data = pd.read_csv('data.csv', sep=',', quotechar='"')
  • error_bad_lines: 遇到坏行是否报错(已弃用)。
    • 替代方法是使用 on_bad_lines='skip'
data = pd.read_csv('data.csv', on_bad_lines='skip')

示例 1:读取基础 CSV 文件

data = pd.read_csv('data.csv', sep=',', encoding='utf-8', nrows=10)print(data.head())

示例 2:处理特殊 CSV 文件

假设文件 data.csv 内容如下:

# 注释行ID,Name,Age,City1,Alice,30,NewYork2,Bob,25,LosAngeles3,Charlie,,Chicago

使用以下代码:

data = pd.read_csv('data.csv', sep=',', comment='#', na_values=[''])print(data)

输出:

ID     Name   Age         City0   1    Alice  30.0      NewYork1   2      Bob  25.0  LosAngeles2   3  Charlie   NaN      Chicago

示例 3:大文件分块读取

chunk_iter = pd.read_csv('large_data.csv', chunksize=10000)for chunk in chunk_iter:    print(chunk.shape)

常见问题

  1. UnicodeDecodeError: 文件编码不匹配,尝试指定编码:

    data = pd.read_csv('data.csv', encoding='latin1')
  2. 分隔符复杂:使用正则表达式:

    data = pd.read_csv('data.csv', sep=r'\s+')
  3. 大文件内存不足:使用 chunksize 分块处理,或仅加载特定列和行。


总结

pandas.read_csv() 提供了灵活强大的参数支持,可以满足绝大多数的 CSV 文件读取需求。根据具体情况调整参数即可高效加载数据!

上一篇:PANDAS.READ_EXCEL()输出‘;溢出错误:日期值超出范围‘;而不存在日期列
下一篇:pandas.DataFrame.copy(deep=True) 实际上并不创建深拷贝

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月29日 06时20分59秒