Python处理CSV文件:剔除指定列并写入新文件的两种方案对比

小岛来信
小岛来信
发布时间:2026-10-13 | 2人浏览过
原创

本文介绍在Python中读取CSV文件并剔除指定列后写入新文件的两种实现方式:原生文件IO循环处理与Pandas DataFrame操作。通过对比27万至110万条数据的处理耗时,结果显示Pandas方案在大数据量下效率提升约30%,逻辑更清晰且性能更优。

本文介绍了两种实现该需求的方法,均参考了现有的社区解决方案。

场景描述:

假设有一个以文本格式存储的数据文件,包含三列字段:user_id、plan_id和mobile_id。最终目标是从中提取数据,生成仅包含mobile_id和plan_id列的新文件。

解决方案:

方案一:利用Python原生文件操作,通过打开源文件并逐行读取,在for循环中处理每一行数据,随后将处理后的结果写入新文件。

具体代码实现如下:

def readwrite1( input_file,output_file):
 f = open(input_file, 'r')
 out = open(output_file,'w')
 print (f)
 for line in f.readlines():
 a = line.split(",")
 x=a[0] + "," + a[1]+"\n"
 out.writelines(x)
 f.close()
 out.close()

方案二:使用pandas库将数据读取至DataFrame对象,进行列筛选操作后,直接利用DataFrame的写入功能将结果保存到新文件。

具体代码实现如下:

def readwrite2(input_file,output_file): date_1=pd.read_csv(input_file,header=0,sep=',') date_1[['mobile', 'plan_id']].to_csv(output_file, sep=',', header=True,index=False) 

从代码结构来看,使用pandas的逻辑更为清晰直观。

接下来对比两种方案的执行效率。

def getRunTimes( fun ,input_file,output_file):
 begin_time=int(round(time.time() * 1000))
 fun(input_file,output_file)
 end_time=int(round(time.time() * 1000))
 print("读写运行时间:",(end_time-begin_time),"ms")

getRunTimes(readwrite1,input_file,output_file) #直接撸数据
getRunTimes(readwrite2,input_file,output_file1) #使用dataframe读写数据

原生IO方案读写耗时:976 ms

Pandas方案读写耗时:777 ms

当input_file包含约27万条数据时,DataFrame方案的执行速度优于for循环方案。若数据量进一步增加,这种性能差异是否会更加显著?

为了验证上述推测,我们增加了input_file的记录数量进行测试,结果如下:

input_file readwrite1 readwrite2
27W 976 777
55W 1989 1509
110W 4312 3158

根据上述测试结果分析,DataFrame方案的效率相比原生IO方案提升了约30%。

以上关于Python读取CSV文件并剔除指定列后写入新文件的实例分享完毕,希望能为读者提供参考,也欢迎大家继续支持本站。

本站声明

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

Python 相关产品和应用

全部下载

专题列表