Python处理CSV文件:剔除指定列并写入新文件的两种方案对比
本文介绍在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文件并剔除指定列后写入新文件的实例分享完毕,希望能为读者提供参考,也欢迎大家继续支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













