读取 CSV 文件
使用 pd.read_csv 加载 CSV 文件,控制分隔符、表头行和索引列,并预览结果。
读取 CSV 文件 是 CoddyKit 上的免费 Pandas & NumPy Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Pandas & NumPy Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Pandas & NumPy Academy 课程共包含 4 节课。
CSV 为何是通用格式
CSV(逗号分隔值)是交换表格数据时使用最广泛的格式。它便于人类阅读,受到所有数据库、电子表格和分析工具的支持,并且不需要定义架构。pd.read_csv() 是数据分析中调用最频繁的 Pandas 函数,因为几乎所有公共数据集、API 导出数据或数据库转储文件都可以使用 CSV 格式。
import pandas as pd
# Read a CSV file from disk
df = pd.read_csv('data/sales.csv')
print(df.shape)
print(df.head())基本的 read_csv() 调用
唯一必需的参数是文件路径(字符串或 Path 对象)。默认情况下,Pandas 会假设第一行是标题行(列名),分隔符是逗号,并将值推断为合适的 dtypes。生成的 DataFrame 使用默认整数 RangeIndex。加载后请始终立即调用 df.info(),以便发现类型推断问题。
import pandas as pd
df = pd.read_csv('products.csv')
# Equivalent with explicit defaults:
df = pd.read_csv('products.csv',
sep=',',
header=0,
index_col=None)控制分隔符
使用 sep= 参数指定非逗号分隔符。制表符分隔文件(TSV)使用 sep='\t'。某些欧洲地区的导出文件使用分号作为分隔符(sep=';'),因为逗号被用作小数分隔符。传入 sep=None, engine='python',即可让 Pandas 根据文件内容自动检测分隔符。
import pandas as pd
# Tab-separated file
df_tsv = pd.read_csv('data.tsv', sep='\t')
# Semicolon-separated (common in Europe)
df_semi = pd.read_csv('data.csv', sep=';')
# Auto-detect separator
df_auto = pd.read_csv('data.txt', sep=None, engine='python')标题行和 skiprows
如果 CSV 没有标题行,请设置 header=None,Pandas 会分配整数列名(0、1、2……)。使用 names=['a', 'b', 'c'] 提供自定义名称。使用 skiprows=n 跳过前 n 行(例如文件顶部的元数据或注释)。skiprows 也接受要跳过的特定行号列表。
import pandas as pd
# CSV with no header
df = pd.read_csv('noheader.csv', header=None,
names=['id', 'value', 'category'])
# Skip first 3 rows (e.g., metadata or comments)
df = pd.read_csv('report.csv', skiprows=3)设置索引列
index_col= 指定用作行索引的列。您可以传入列名或整数位置。设置有意义的索引(例如日期列或唯一 ID)后,可以通过 .loc 快速按标签访问数据,并且这是执行时间序列操作的前提。传入列表即可创建 MultiIndex。
import pandas as pd
# Use 'date' column as row index
df = pd.read_csv('timeseries.csv', index_col='date', parse_dates=True)
print(df.index.dtype) # datetime64[ns]
# Equivalent with column position
df2 = pd.read_csv('timeseries.csv', index_col=0, parse_dates=True)加载时解析日期
parse_dates=True 会告知 Pandas 尝试将索引转换为日期时间。将列名列表传给 parse_dates=['col1', 'col2'],即可将指定的非索引列解析为日期。Pandas 会自动尝试常见格式;对于不常见的格式,请使用 date_format=。加载时解析日期可以避免之后反复调用 pd.to_datetime()。
import pandas as pd
# Parse 'order_date' column as datetime
df = pd.read_csv('orders.csv',
parse_dates=['order_date'])
print(df['order_date'].dtype) # datetime64[ns]使用 usecols 选择列
usecols=['col1', 'col2'] 只加载指定的列,忽略其他所有列。对于大型 CSV 文件,这一点至关重要:如果您只需要 5 列,就没有必要读取包含 200 列的文件。这样可以显著减少 I/O 时间和内存使用量。传入一个可调用对象,即可根据名称模式选择列。
import pandas as pd
# Load only 3 of potentially many columns
df = pd.read_csv('big_file.csv',
usecols=['user_id', 'event', 'timestamp'])
print(df.columns.tolist()) # ['user_id', 'event', 'timestamp']加载时控制数据类型
Pandas 会推断数据类型,但推断结果可能不正确——全是数字字符串的 ID 列可能会变成 int64,而包含缺失值的价格列可能会意外变成 float64。使用 dtype={'col': str} 可强制指定类型。这也更加高效:预先指定数据类型可以跳过推断过程,将大型文件的加载速度提高 20% 到 30%。
import pandas as pd
df = pd.read_csv('orders.csv', dtype={
'order_id': str, # keep as string (not int)
'price': float,
'quantity': 'int32' # use smaller int
})加载时处理缺失值
默认情况下,Pandas 能识别许多缺失值表示形式:空单元格、'NA'、'NaN'、'N/A'、'null' 等。使用 na_values=['?', '-', 'missing'] 可添加自定义标记。使用 keep_default_na=False 可禁用内置列表,只将您指定的值视为缺失值。这样可以避免误将合法的字符串值(例如缩写形式的 'NA')当作 NaN。
import pandas as pd
df = pd.read_csv('survey.csv',
na_values=['?', '', 'N/A', 'none'])
print(df.isnull().sum())大型文件的 nrows 和 chunksize
nrows=100 只加载前 100 行,非常适合对超大文件快速检查结构。chunksize=10000 会返回一个 TextFileReader 迭代器,每次生成包含 10000 行的 DataFrames,从而可以分块处理无法一次装入 RAM 的文件。高级性能课程将深入介绍分块读取。
import pandas as pd
# Quick peek at a large file
header_df = pd.read_csv('huge.csv', nrows=5)
print(header_df.dtypes)
# Chunked reading
for chunk in pd.read_csv('huge.csv', chunksize=50000):
print(chunk.shape) # process each chunkread_csv 的常见陷阱
请注意以下常见问题:编码错误(使用 encoding='utf-8' 或 'latin-1')、列名开头有空格(使用 skipinitialspace=True)、数字中包含千位分隔符(使用 thousands=','),以及欧洲数字中的小数逗号(使用 decimal=',' 和 sep=';')。如果忽略这些问题,数值列都会悄悄变成对象类型。
import pandas as pd
# European format: semicolon sep, comma decimal, UTF-8
df = pd.read_csv('euro_data.csv',
sep=';',
decimal=',',
thousands='.',
encoding='utf-8',
skipinitialspace=True)快速检查
通过本课内容检验您对使用 Pandas 读取 CSV 文件的理解。
课程回顾
本课您学习了:pd.read_csv() 是加载表格数据的主要函数,并提供许多配置参数;sep、header、index_col 和 parse_dates 控制文件的解析方式;以及 usecols 和 dtype 可以提升大型文件的性能并确保类型安全。接下来,我们将读取 Excel 和 JSON 文件,它们各自有特定于格式的参数。
常见问题解答
「读取 CSV 文件」课时是免费的吗?
是的 — 「读取 CSV 文件」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Pandas & NumPy Academy 课程的其余内容,请升级到 CoddyKit PRO。 Pandas & NumPy Academy 课程共包含 4 节课。
「读取 CSV 文件」这节课中我会学到什么?
使用 pd.read_csv 加载 CSV 文件,控制分隔符、表头行和索引列,并预览结果。 你通过在浏览器中直接运行的动手代码来练习 Pandas & NumPy Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Pandas & NumPy Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Pandas & NumPy Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「读取 CSV 文件」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Pandas & NumPy Academy 课中编写并运行代码吗?
能。每节 Pandas & NumPy Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。