pd.read_csv()
—— 读取 CSV 文件
pandas.read_csv()
用于读取 CSV(逗号分隔值)文件,并将其转换为 DataFrame,适用于 数据分析、数据清洗、机器学习 等任务。
1. 语法
import pandas as pd
df = pd.read_csv(filepath, sep=',', header='infer', names=None, index_col=None, usecols=None, dtype=None)
常用参数
参数 | 作用 |
---|---|
filepath | CSV 文件路径(本地路径或 URL) |
sep | 分隔符(默认 , ,支持 \t (TSV)、` |
header | 指定标题行(header=None 表示无表头) |
names | 设定列名(适用于无标题 CSV) |
index_col | 设置索引列(index_col=0 代表第一列为索引) |
usecols | 选择要读取的列(usecols=["col1", "col2"] ) |
dtype | 指定列的数据类型(dtype={"col1": str, "col2": float} ) |
nrows | 读取前 n 行数据 |
skiprows | 跳过前 n 行(skiprows=10 跳过前 10 行) |
encoding | 指定编码格式(如 utf-8 ,latin1 ,gbk ) |
2. 读取 CSV 文件
2.1 读取标准 CSV
import pandas as pd
df = pd.read_csv("data.csv")
print(df.head()) # 查看前 5 行
如果 data.csv
内容如下:
name,age,score
Alice,25,90
Bob,30,85
Charlie,22,95
输出
name age score
0 Alice 25 90
1 Bob 30 85
2 Charlie 22 95
2.2 读取无表头 CSV
df = pd.read_csv("data.csv", header=None, names=["Name", "Age", "Score"])
print(df.head())
作用
header=None
:告诉 Pandas 这个 CSV 没有列名names=["Name", "Age", "Score"]
:指定列名
2.3 读取指定列
df = pd.read_csv("data.csv", usecols=["name", "age"])
print(df.head())
作用
usecols=["name", "age"]
:只读取指定的列,忽略score
列
2.4 设定索引列
df = pd.read_csv("data.csv", index_col="name")
print(df.head())
作用
index_col="name"
:将name
设为索引列
2.5 处理不同分隔符(TSV、管道分隔)
df = pd.read_csv("data.tsv", sep="\t") # 读取 TSV 文件
df = pd.read_csv("data.txt", sep="|") # 读取 | 分隔文件
作用
sep="\t"
:读取制表符(TSV 文件)sep="|"
:读取|
分隔的文件
2.6 处理缺失值
df = pd.read_csv("data.csv", na_values=["?", "N/A", "NULL"])
print(df.isnull().sum()) # 查看缺失值
作用
na_values=["?", "N/A", "NULL"]
:将?
、N/A
、NULL
识别为 NaN
2.7 只读取前 n
行
df = pd.read_csv("data.csv", nrows=10)
print(df)
作用
nrows=10
:只读取前 10 行
2.8 跳过前 n
行
df = pd.read_csv("data.csv", skiprows=5)
print(df)
作用
skiprows=5
:跳过前 5 行,不读取
2.9 设定数据类型
df = pd.read_csv("data.csv", dtype={"age": int, "score": float})
print(df.dtypes)
作用
dtype={"age": int, "score": float}
:指定age
为整数,score
为浮点数
2.10 读取 URL CSV
url = "https://people.sc.fsu.edu/~jburkardt/data/csv/hw_200.csv"
df = pd.read_csv(url)
print(df.head())
作用
- 直接读取在线 CSV 文件
3. 解决常见问题
3.1 UnicodeDecodeError(编码问题)
df = pd.read_csv("data.csv", encoding="latin1") # 或 encoding="gbk"
原因
- CSV 可能不是 UTF-8 编码(如 GBK、Latin-1)
3.2 Pandas 解析速度慢
df = pd.read_csv("data.csv", low_memory=False) # 适用于大文件
作用
low_memory=False
加速解析大文件
3.3 CSV 文件带 #
开头的注释
df = pd.read_csv("data.csv", comment="#")
作用
comment="#"
忽略#
开头的注释行
4. 总结
用法 | 代码 |
---|---|
读取标准 CSV | pd.read_csv("data.csv") |
读取无表头 CSV | pd.read_csv("data.csv", header=None, names=["A", "B"]) |
读取指定列 | pd.read_csv("data.csv", usecols=["col1", "col2"]) |
设定索引列 | pd.read_csv("data.csv", index_col="name") |
处理缺失值 | pd.read_csv("data.csv", na_values=["?", "N/A"]) |
设定数据类型 | pd.read_csv("data.csv", dtype={"age": int}) |
读取前 n 行 | pd.read_csv("data.csv", nrows=10) |
跳过前 n 行 | pd.read_csv("data.csv", skiprows=5) |
解决编码错误 | pd.read_csv("data.csv", encoding="latin1") |
pd.read_csv()
是 Pandas 最常用的数据读取方法,支持 各种格式、数据过滤、编码处理,适用于 大规模数据分析。