Python读csv文件去掉一列后再写入新的文件实例
用了两种方式解决该问题,都是网上现有的解决方案。
场景说明:
有一个数据文件,以文本方式保存,现在有三列user_id,plan_id,mobile_id。目标是得到新文件只有mobile_id,plan_id。
解决方案
方案一:用python的打开文件写文件的方式直接撸一遍数据,for循环内处理数据并写入到新文件。
代码如下:
defreadwrite1(input_file,output_file): f=open(input_file,'r') out=open(output_file,'w') print(f) forlineinf.readlines(): a=line.split(",") x=a[0]+","+a[1]+"\n" out.writelines(x) f.close() out.close()
方案二:用pandas读数据到DataFrame再做数据分割,直接用DataFrame的写入功能写到新文件
代码如下:
defreadwrite2(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逻辑更清晰。
下面看下执行的效率吧!
defgetRunTimes(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读写数据
读写运行时间:976ms
读写运行时间:777ms
input_file大概有27万的数据,dataframe的效率比for循环效率还是要快一点的,如果数据量更大些,效果是否更明显呢?
下面试下增加input_file记录的数量试试,有如下结果
input_file
readwrite1
readwrite2
27W
976
777
55W
1989
1509
110W
4312
3158
从上面测试结果来看,dataframe的效率提高大约30%左右。
以上这篇Python读csv文件去掉一列后再写入新的文件实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。