基于python将较大的文本文件读取为dataframe时(文本文件可能是csv或者xlsx类型)。直接用pandas对整个文件进行读取的话,会比较耗时。
这里提供一个简单的加速方案:分批读取。
需要首先将文件转为可以分批读取的数据类型:csv(’,‘分隔)或者tsv(’\t’分隔)。
然后基于 pandas 的 read_csv函数的 chunksize参数实现分批读取(此参数用于设定每批读入多少行数据)。一般设置为一个稍大的整数即可明显提速。
封装成以下的函数,可以直接调用:
说明:此函数针对csv文件,如果文件不是基于逗号分隔,在read_csv函数中设置对应的sep参数(分隔符)。
def read_single_csv(input_path):
import pandas as pd
df_chunk=pd.read_csv(input_path,chunksize=1000)
res_chunk=[]
for chunk in df_chunk:
res_chunk.append(chunk)
res_df=pd.concat(res_chunk)
return res_df
以上方案在文件行数较大的情况下(数十万行以上),亲测提速明显。
问题背景基于python将较大的文本文件读取为dataframe时(文本文件可能是csv或者xlsx类型)。直接用pandas对整个文件进行读取的话,会比较耗时。这里提供一个简单的加速方案:分批读取。实现方案需要首先将文件转为可以分批读取的数据类型:csv(’,‘分隔)或者tsv(’\t’分隔)。然后基于 pandas 的 read_csv函数的 chunksize参数实现分批读取(此参数用于设定每批读入多少行数据)。一般设置为一个稍大的整数即可明显提速。封装成以下的函数,可以直接调用:def
print(chunk.tail(10))
以上这篇python读取几个G的csv文件方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。
您可能感兴趣的文章:python读csv文件时指定行为表头或无表头的方法Python把对应格
首先使用office打不开
然后在python中使用基本的pandas.read_csv打开文件时:MemoryError
最后查阅read_csv文档发现可以分块读取。
read_csv中有个参数chunksize,通过指定一个chunksize分块大小来读取文件,返回的是一个可迭代的对象TextFileReader,IO
pandas的chunk分块读取
read_chunks = pd.read_csv(csv_path, encoding='utf-8', iterator=True, chunksize=65535)
参数说明:
问题描述:
网上建议使用pandas包的DataFrame处理方便高效,比csv包好。但执行时非常慢,1600万行记录(1.6GB),跑了5小时都没结束(4列置空,1列Hash)
# 需要hash的示例代码
for field in field_list:
for i in range(0, len(csv_df.index)):
if not pd.isnull(csv_df[field][i]):
第一:pandas.read_csv读取本地csv文件为数据框形式
data=pd.read_csv('G:\data_operation\python_book\chapter5\\sales.csv')
第二:如果存在日期格式数据,利用pandas.to_datatime()改变类型
data.iloc[:,1]=pd.to_datetime(data.iloc[:,1])
注意:=号,这样在原始的数据框中,改变了列的类型
第三:查看列类型
print(data.dtypes)
第四:方法一:保存至MYSQL【缺点耗时长】
利用MYSQLdb库,封装成一个类,实现创建表,添加数据的操作
由于客户提供的是excel文件,在使用时期望使用csv文件格式,且对某些字段内容需要做一些处理,如从某个字段中固定的几位抽取出来,独立作为一个字段等,下面记录下使用acaconda处理的过程;
import pandas
df = pandas.read_excel("/***/***.xlsx")
df.columns = [内部为你给你的excel每一列自定义的名称](比如我给我的excel自定义列表为:
["url","productName","***",。。。,"***"])
(下面开始你自己的表演,对每一列内容进行你自己需要的处理)
df["url"] = df["url"].