现在位置: 首页 > Pandas 教程 > 正文

Pandas pd.ead_csv() 函数

Python math 模块 Pandas 常用函数


read_csv() 是 pandas 库中最常用的数据读取函数,用于从 CSV(逗号分隔值)文件中读取数据并创建 DataFrame。

CSV 文件是一种简单且广泛使用的数据交换格式,它以纯文本形式存储表格数据,每行代表一条记录,字段之间用逗号分隔。read_csv() 能够智能解析 CSV 文件,自动识别列名、数据类型,并处理各种分隔符和编码问题。


基本语法与参数

语法格式

pandas.read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer',
                names=None, index_col=None, usecols=None, dtype=None,
                skiprows=None, nrows=None, na_values=None, ...)

参数说明

参数类型说明默认值
filepath_or_bufferstr, path object, 或 file-like objectCSV 文件的路径、URL 或文件对象必填
sepstr字段分隔符,CSV 默认是逗号','
headerint, list of int, 'infer'用作列名的行号,0 表示第一行'infer'
nameslist-like自定义列名列表None
index_colint, str, list of int, list of str, False用作行索引的列None
usecolslist-like, callable只读取指定的列None
dtypedict指定列的数据类型,如 {'a': np.float64}None
skiprowslist-like, int跳过指定的行None
nrowsint只读取前 n 行None
na_valuesscalar, str, list-like, dict识别为 NA/NaN 的值None
encodingstr文件编码,如 'utf-8'None

返回值

  • 返回类型pd.DataFrame
  • 返回一个二维标记的数据结构,即 pandas 的 DataFrame,可以对其进行各种数据分析和处理操作。

实例

通过以下示例,全面掌握 read_csv() 的各种用法。

示例 1:读取本地 CSV 文件

首先创建一个简单的 CSV 文件,然后使用 read_csv() 读取它。

实例

import pandas as pd

# 创建一个示例 CSV 文件
# 先写入一些测试数据
data = """name,age,city,salary
Tom,28,Beijing,8000
Jerry,35,Shanghai,12000
Mike,42,Guangzhou,15000
Lucy,26,Shenzhen,7000
"""


# 将数据写入文件(实际使用时可以直接读取已有文件)
with open('employees.csv', 'w', encoding='utf-8') as f:
    f.write(data)

# 使用 read_csv 读取 CSV 文件
# filepath_or_buffer: 文件路径(必填)
df = pd.read_csv('employees.csv')

# 查看读取结果
print("读取的 DataFrame:")
print(df)
print("n数据类型:")
print(df.dtypes)
print("n列名:", df.columns.tolist())

运行结果预期:

读取的 DataFrame:
    name  age       city  salary
0    Tom   28    Beijing    8000
1  Jerry   35   Shanghai   12000
2   Mike   42  Guangzhou   15000
3   Lucy   26  Shenzhen    7000

数据类型:
name      object
age        int64
city      object
salary    int64

列名: ['name', 'age', 'city', 'salary']

代码解析:

  • pd.read_csv('employees.csv') 是最基本的用法,直接传入文件路径即可。
  • 默认情况下,第一行被自动识别为列名(header='infer')。
  • pandas 自动推断每列的数据类型:字符串变为 object,整数变为 int64。
  • 返回的 DataFrame 可以直接使用 print() 查看,也可以进行后续的数据分析。

示例 2:自定义列名和选择特定列

在实际工作中,我们可能需要自定义列名,或者只读取部分列来提高性能。

实例

import pandas as pd

# 创建测试数据
data = """name,age,city,salary,department
Tom,28,Beijing,8000,IT
Jerry,35,Shanghai,12000,HR
Mike,42,Guangzhou,15000,Sales
Lucy,26,Shenzhen,7000,IT
"""


with open('employees2.csv', 'w', encoding='utf-8') as f:
    f.write(data)

# 示例 2a: 自定义列名
# names 参数用于指定新的列名,会覆盖原文件的列名
df_custom = pd.read_csv('employees2.csv', names=['姓名', '年龄', '城市', '薪资', '部门'], header=0)
print("自定义列名后的 DataFrame:")
print(df_custom)
print()

# 示例 2b: 只读取指定的列
# usecols 参数可以指定只读取哪些列,提高性能
df_partial = pd.read_csv('employees2.csv', usecols=['name', 'salary'])
print("只读取部分列:")
print(df_partial)
print()

# 示例 2c: 使用 index_col 指定索引列
df_indexed = pd.read_csv('employees2.csv', index_col='name')
print("设置 name 为索引:")
print(df_indexed)

运行结果预期:

自定义列名后的 DataFrame:
    姓名  年龄       城市    薪资     部门
0   Tom   28    Beijing   8000      IT
1  Jerry   35   Shanghai  12000      HR
2   Mike   42  Guangzhou  15000   Sales
3   Lucy   26   Shenzhen   7000      IT

只读取部分列:
   name  salary
0    Tom    8000
1  Jerry   12000
2   Mike   15000
3    Lucy    7000

设置 name 为索引:
      age       city  salary department
name
Tom     28    Beijing    8000         IT
Jerry  35   Shanghai   12000         HR
Mike   42  Guangzhou   15000       Sales
Lucy   26   Shenzhen    7000         IT

代码解析:

  • names 参数需要与数据的列数一致,如果文件有表头行,可以设置 header=0 来使用原表头。
  • usecols 可以传入列名列表(推荐)或列索引列表,返回的列顺序与指定顺序一致。
  • index_col 将某列设置为行索引,便于后续按索引快速查询数据。

示例 3:处理特殊数据和完善缺失值处理

CSV 文件中可能存在缺失值、特殊分隔符或需要跳过某些行的情况。

实例

import pandas as pd

# 创建包含特殊数据的 CSV 文件
# 使用分号作为分隔符,包含缺失值和NA值
data = """name;age;city;salary
Tom;28;Beijing;8000
Jerry;;Shanghai;12000
Mike;42;Guangzhou;
Lucy;26;NA;7000
"""


with open('employees3.csv', 'w', encoding='utf-8') as f:
    f.write(data)

# 示例 3a: 读取分号分隔的文件
df_semicolon = pd.read_csv('employees3.csv', sep=';')
print("使用分号分隔符:")
print(df_semicolon)
print("缺失值统计:")
print(df_semicolon.isnull())
print()

# 示例 3b: 指定哪些值被视为缺失值
df_na = pd.read_csv('employees3.csv', sep=';', na_values=['NA', 'missing'])
print("自定义 NA 值后:")
print(df_na)
print()

# 示例 3c: 跳过行和限制读取行数
# 假设文件前几行是注释,可以跳过
data_with_comment = """# 这是一个员工数据文件
# 创建日期: 2024-01-01
name;age;city;salary
Tom;28;Beijing;8000
Jerry;35;Shanghai;12000
Mike;42;Guangzhou;15000
Lucy;26;Shenzhen;7000
"""

with open('employees4.csv', 'w', encoding='utf-8') as f:
    f.write(data_with_comment)

# skiprows 跳过前两行(注释行)
df_skip = pd.read_csv('employees4.csv', sep=';', skiprows=2)
print("跳过注释行后:")
print(df_skip)
print()

# nrows 只读取前 3 行
df_nrows = pd.read_csv('employees4.csv', sep=';', skiprows=2, nrows=3)
print("只读取前3行:")
print(df_nrows)

运行结果预期:

使用分号分隔符:
    name  age       city   salary
0    Tom   28.0    Beijing   8000.0
1  Jerry   NaN   Shanghai  12000.0
2    NaN  42.0   Guangzhou      NaN
3  Lucy  26.0         NA    7000.0

缺失值统计:
    name    age   city  salary
0  False  False  False   False
1  False   True  False   False
2   True  False  False    True
3  False  False   False  False

自定义 NA 值后:
    name  age       city   salary
0    Tom  28.0    Beijing   8000.0
1  Jerry   NaN   Shanghai  12000.0
2   NaN  42.0   Guangzhou      NaN
3  Lucy  26.0         NaN   7000.0

跳过注释行后:
    name  age       city  salary
0    Tom   28   Beijing    8000
1  Jerry  35  Shanghai   12000
  42  Guangzhou   15000
2   Mike
3   Lucy   26   Shenzhen    7000

只读取前3行:
    name  age       city  salary
0    Tom   28   Beijing    800本地
1  Jerry  35   Shanghai   12000
2   Mike   42  Guangzhou   15000

代码解析:

  • sep 参数可以指定任意分隔符,如分号、制表符等。
  • 默认情况下,空字符串、空格等会被识别为缺失值。可以通过 na_values 参数自定义被视为 NA 的值。
  • skiprows 可以跳过文件开头的指定行数,方便处理带注释的文件。
  • nrows 限制读取的行数,适合大文件的分块读取。

注意事项

  • 读取大文件时,可以考虑使用 chunksize 参数分块读取,避免内存不足。
  • 处理中文文件时,需要正确指定 encoding 参数,常用编码有 'utf-8'、'gbk'、'gb2312' 等。
  • 如果 CSV 文件没有表头行,需要设置 header=None,然后通过 names 参数指定列名。
  • 对于格式不标准的 CSV 文件,可能需要调整 sepquotechar 等参数来正确解析。

小结

read_csv() 是 pandas 中最基础也是最重要的数据读取函数。它功能强大,支持多种分隔符、自定义列名、索引设置、缺失值处理等高级功能。

在实际数据分析工作中,掌握 read_csv() 的各种参数用法,可以高效地处理各种格式的 CSV 文件,为后续的数据清洗和分析打下坚实基础。建议读者多加练习,熟练掌握这些常用参数。

Python math 模块 Pandas 常用函数