Pandas:如何从CSV或Excel文件读取指定行?
我完全懂你这种不想加载整个大DataFrame的痛点——毕竟大文件加载不仅费内存,还慢得让人着急。针对直接从CSV/Excel文件提取特定行到小DataFrame的需求,这里有几个实用的方法,分场景给你说说:
处理CSV文件的方法
- 指定行号提取:用pandas的
read_csv配合skiprows和nrows参数就能精准提取目标行。比如你要提取第5到第15行(假设表头是第1行),可以这么写:
import pandas as pd # skiprows跳过前4行数据(行号从1开始算),nrows取11行(5到15共11行) df = pd.read_csv('large_file.csv', skiprows=range(1,5), nrows=11)
如果要提取不连续的行,比如表头+第3、7、12行,用自定义函数过滤行号:
df = pd.read_csv('large_file.csv', skiprows=lambda x: x not in [0,3,7,12]) # 这里0是表头行,3、7、12是要保留的数据行号(从0开始计数)
- 按条件筛选后提取:如果不知道具体行号,但知道筛选规则,用
chunksize分块读取文件,只保留符合条件的行,避免加载整个文件:
import pandas as pd chunk_size = 1000 # 每次读1000行,可根据内存调整 filtered_rows = [] for chunk in pd.read_csv('large_file.csv', chunksize=chunk_size): # 替换成你的筛选条件,比如某列等于特定值 filtered_chunk = chunk[chunk['target_column'] == 'desired_value'] filtered_rows.append(filtered_chunk) # 把筛选后的小块拼接成小DataFrame small_df = pd.concat(filtered_rows, ignore_index=True)
处理Excel文件的方法
Excel文件的处理要注意格式(.xls/.xlsx),推荐用只读模式来提升效率:
- 用
openpyxl直接读取特定行(适合.xlsx):如果不想依赖pandas的全表读取,用openpyxl的只读模式可以直接定位行,再转成DataFrame:
from openpyxl import load_workbook import pandas as pd # 只读模式加载,避免占用过多内存 wb = load_workbook('large_file.xlsx', read_only=True) ws = wb.active # 提取第1行(表头)到第15行的数据 rows = [] for row in ws.iter_rows(min_row=1, max_row=15, values_only=True): rows.append(row) # 转成DataFrame,rows[0]是表头,rows[1:]是数据 df = pd.DataFrame(rows[1:], columns=rows[0]) wb.close()
- pandas的
read_excel参数适配:和CSV逻辑类似,用skiprows和nrows直接提取,注意指定对应引擎:
import pandas as pd # 针对.xlsx用openpyxl引擎,.xls用xlrd引擎 df = pd.read_excel('large_file.xlsx', engine='openpyxl', skiprows=range(1,5), nrows=11)
关于你提到的转置/透视方案:确实会遇到Excel的列数限制(Excel最多支持16384列),如果原文件行数超过这个数,转置后肯定会触发报错,所以直接提取目标行的方案才是更稳妥的选择。
内容的提问来源于stack exchange,提问作者A. Bernard
相关产品推荐
相关产品推荐

