【问题标题】:Efficiently reading multiple csv files into Pandas dataframe有效地将多个 csv 文件读入 Pandas 数据帧
【发布时间】:2017-08-14 18:32:46
【问题描述】:

我正在尝试读取 3 年的数据文件(每个日期一个),与父文件(每个大约 90MB 和 150 万行)相比,我感兴趣的部分通常很小(总共约 140 万行)行)。下面的代码过去对我来说效果很好,文件数量较少。但是要处理 1095 个文件,它正在爬行(读取一个文件大约需要 3-4 秒)。有什么建议可以提高效率/速度吗?

import pandas as pd
from glob import glob

file_list = glob(r'C:\Temp2\dl*.csv') 
for file in file_list:
    print(file)
    df = pd.read_csv(file, header=None)
    df = df[[0,1,3,4,5]]
    df2 = df[df[0].isin(det_list)]  
    if file_list[0]==file:
        rawdf = df2
    else:
        rawdf = rawdf.append(df2)

【问题讨论】:

  • 你可以指定列的dtypes
  • 谢谢,@djk47463:最终的 df 有 4 个整数和 1 个日期时间字段。这会提高阅读/处理速度吗?

标签: python-3.x pandas dataframe glob


【解决方案1】:

IIUC,试试这个:

import pandas as pd
from glob import glob

file_list = glob(r'C:\Temp2\dl*.csv')

cols = [0,1,3,4,5]

df = pd.concat([pd.read_csv(f, header=None, usecols=cols)
                  .add_prefix('c')
                  .query("c0 in @det_list") 
                for f in file_list],
               ignore_index=True)

【讨论】:

  • 谢谢,@MaxU。这段代码还提取了我需要的数据。但它仍然需要 30:24 分钟。我计时了这次跑步。稍后将重新运行我的原始代码,并在问题中发布时间。
猜你喜欢
  • 2019-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-29
相关资源
最近更新 更多