python - 更快地读取 CSV 文件

标签 python csv pandas dataframe data-science

我在 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 函数时,读取文件并将其上传到 python 笔记本大约需要 6 秒。我可以做什么来加快速度?

谢谢!

最佳答案

更新:查看您的逻辑,您似乎不需要首先使用 sep='delimiter' 因为您将仅使用(拆分)第一个(索引=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+

旧答案:

首先不要读取不需要的列(或者要删除的列: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 文件的所有这些问题;)

关于python - 更快地读取 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40556159/

相关文章:

python - 使用 Twisted 进行非阻塞文件访问

python - 属性错误: module 'pandas.tseries.offsets' has no attribute 'timedelta'

python - ix 没有按要求引用索引

python - 在转换中访问 DataFrame 的不同列

python - 为什么我在 Django 中会出现此错误?

python - %(something)s 是什么意思?

Python 的多处理 : speed up a for-loop for several sets of parameters, "apply"与 "apply_async"

javascript - 如何使用 jquery 将 html 值(不是表格)导出到 csv 文件?

javascript - ChartJS : Uncaught TypeError: Cannot read property 'call' of undefined

python - 如何使用pathlib & csv模块来编写?