我在pandas数据帧中快速读取203 mb文件时遇到了一些麻烦。我想知道是否有更快的方法可以做到这一点。以下是我的功能:
import pandas as pd
import numpy as np
def file(filename):
df = pd.read_csv(filename, header=None, sep='delimiter', engine='python', skiprows=1)
df = pd.DataFrame(df[0].str.split(',').tolist())
df = df.drop(df.columns[range(4,70)], axis=1)
df.columns = ['time','id1','id2','amount']
return df
当我使用魔术%timeit
函数时,花了大约6秒钟来读取文件并将其上传到python笔记本中。我该怎么做才能加快速度呢?
谢谢!
答案 0 :(得分:2)
更新:查看您的逻辑,您似乎不需要先使用sep='delimiter'
,因为您将仅使用(拆分)第一个(index = 0)列,所以你可以这样做:
df = pd.read_csv(filename, header=None, usecols=[0,1,2,3],
names=['time','id1','id2','amount'],
skipinitialspace=True, skiprows=1)
PS默认read_csv()
将使用C
引擎,如果sep
不超过1个字符,或者\s+
{ p>
OLD回答:
首先,请不要阅读您不需要的列(或您要删除的列:df.drop(df.columns[range(4,70)], axis=1)
):
df = pd.read_csv(filename, header=None, usecols=[0], names=['txt'],
sep='delimiter', skiprows=1)
然后将单个已解析的列拆分为四个:
df[['time','id1','id2','amount']] = df.pop('txt').str.split(',', expand=True)
PS我强烈建议您将数据转换为HDF5格式(如果可以的话)并忘记CSV文件的所有问题;)