Python Pandas读写CSV文件全攻略:从基础到高级应用

白榆
白榆
发布时间:2026-10-13 | 5人浏览过
原创

本文详细介绍使用Python Pandas库读写CSV文件的各种方法。涵盖基础导入、两种读取方式、按条件读取、正则分隔符处理、行选择、缺失值处理、逐行读取及写入DataFrame等核心操作,并提供完整代码示例,帮助开发者高效处理结构化数据。

环境准备与库导入

首先,需要在Python环境中导入必要的库。主要使用pandas模块进行数据处理,同时可能需要从pandas中单独导入Series类以处理序列数据。这是进行后续所有CSV文件操作的前提步骤。


import pandas as pd
from pandas import Series

CSV文件基础读取方法

读取CSV文件通常有两种常用方法。第一种是直接打开文件句柄后调用read_csv函数,例如打开'E:/建模/第5周/data/ex1.csv'并打印结果。第二种方法是使用read_table函数,但必须显式指定分隔符为逗号(sep=','),否则可能导致读取失败。无论哪种方式,操作完成后都应关闭文件句柄以释放资源。


#读取csv文件的两种方式
f = open('E:/建模/第5周/data/ex1.csv') #方法一
df = pd.read_csv(f)
print(df)
f.close

f = open('E:/建模/第5周/data/ex1.csv') #方法二,必须指定分隔符为',',否则会读取失败
df = pd.read_table(f,sep=',')
print(df)
f.close

自定义读取参数与索引设置

根据实际需求,可以灵活配置读取CSV文件的参数。如果文件没有表头,可以设置header=None;如果需要自定义列名,可以通过names参数指定列表,如['a','b','c','d','message']。此外,还可以指定某一列作为行索引(index_col='message'),或者指定多列作为多级索引(index_col=['key1','key2'])。这些选项允许用户根据数据源的具体结构调整读取方式。


#根据需要条件读取csv文件
f = open('E:/建模/第5周/data/csv_mindex.csv') 
df = pd.read_csv(f,header=None)   #不需要表头
df = pd.read_csv(f,names=['a','b','c','d','message'])  #添加表头
df = pd.read_csv(f,names=['a','b','c','d','message'],index_col = 'message')  #指定某一列作为行索引
df = pd.read_csv(f,index_col = ['key1','key2'])  #指定多列作为行索引
print(df)
f.close

正则表达式处理分隔符

当处理包含不同分隔符的文件时,可以利用正则表达式来解析数据。例如,使用read_table函数并设置sep='\s+',可以自动识别并处理由空白字符(如空格、制表符等)分隔的数据文件。这种方法特别适用于格式不固定或分隔符为空白序列的文本文件,确保数据能被正确解析为DataFrame。


#利用正则表达式读取不同含有不同分隔符的文件
f = open('E:/建模/第5周/data/ex3.txt') 
df = pd.read_table(f,sep='\s+')
print(df)

选择性读取指定行

在读取大型CSV文件时,可能有选择性读取特定行的需求。通过设置skiprows参数,可以跳过指定的行号,例如skiprows=[0,2,3]将跳过第0、2和3行。这种方法有助于忽略文件中的非数据部分(如标题说明或空行),只提取需要的数据行,从而提高处理效率。


#根据需要选择需要读的行
f = open('E:/建模/第5周/data/ex4.csv') 
df = pd.read_table(f,sep=',',skiprows=[0,2,3]) #跳过不想读的行
print(df)

缺失值识别与处理

处理缺失值是数据清洗的重要环节。在读取CSV文件时,可以通过na_values参数指定额外的缺失值标识符。例如,设置na_values='world',则文件中出现的'world'字符串将被自动识别为缺失值(NaN)。这使得用户可以根据业务逻辑自定义哪些数据应被视为无效或缺失,增强数据处理的灵活性。


#处理缺失值
f = open('E:/建模/第5周/data/ex5.csv') 
df = pd.read_table(f,sep=',',na_values='world') #如果数据中有'world',也会视为缺失值
print(df)

限制读取行数

对于超大文件,逐行读取或限制读取行数可以避免内存溢出。使用nrows参数可以指定只读取文件的前N行,例如nrows=5仅读取前5行数据。这种方法适用于快速预览数据或测试代码逻辑,确保在处理大规模数据集时系统资源的合理分配。


#逐行读取文件
f = open('E:/建模/第5周/data/ex6.csv') 
df = pd.read_table(f,sep=',',nrows=5) #只读取前面5行
print(df)

DataFrame写入CSV配置

将DataFrame数据写入CSV文件同样支持多种配置。使用to_csv方法,可以指定输出路径,如'E:/建模/第5周/data/out.csv'。若需处理缺失值,可设置na_rep='ok'将NaN替换为指定字符串;若不需要表头,可设置header=None;若只需保存特定列,可通过columns参数指定列名列表,如['a','b']。这些选项使得输出文件更符合下游应用的需求。


#将dataframe数据写入csv文件
f = open('E:/建模/第5周/data/ex5.csv') 
data = pd.read_csv(f)
data.to_csv('E:/建模/第5周/data/out.csv')  #将dataframe输出到csv文件中
data.to_csv('E:/建模/第5周/data/out.csv',na_rep='ok')  #将缺失值补上‘ok'
data.to_csv('E:/建模/第5周/data/out.csv',header=None)  #不设置表头
data.to_csv('E:/建模/第5周/data/out.csv',columns=['a','b'])  #写出指定的列

读取为Series对象

除了DataFrame,Pandas还可以将CSV文件直接读取为Series对象。使用Series.from_csv方法,并设置parse_dates=True以解析日期列,可以将单列数据转换为时间序列Series。这种方式适用于只需关注单一变量随时间变化的场景,简化了数据结构并提高了处理效率。


#将csv文件读取位Series
f = open('E:/建模/第5周/data/tseries.csv') 
series = Series.from_csv(f,parse_dates=True)
print(series)

以上内容涵盖了使用Pandas进行CSV文件读写的主要技巧和参数配置。通过灵活运用这些方法,开发者可以高效地处理各种格式的结构化数据。希望本文提供的示例和说明能对您的数据处理工作有所帮助,欢迎继续探索Pandas的其他高级功能。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表