将多个Excel文件加载到Pandas(很多文件......快)

时间:2018-06-12 14:38:02

标签: python pandas

我在多个(子)文件夹中有大约5400个Excel文件,并希望将它们加载到单个数据框中。这些文件只有1张,每行最多可以有2000多行。行总数预计为200万或更多。

我的电脑有SSD HD和8GB内存,速度非常快。还需要几个小时才能完成。我的代码有什么问题吗?我很感激任何提示。

%%time
files = glob.glob('asyncDatas/**/*.xlsx',recursive=True)

df = pd.DataFrame()

for num, fname in enumerate(files, start=1):
    print("File #{} | {}".format(num, fname))
    if len(fname) > 0:
        data = pd.read_excel(fname, 'Sheet0', index_col='Time', skiprows=3)
        df = df.append(data)

df.head()

我的预感是.append方法需要花费太多时间,因为它可能会动态重新分配内存? .concat()可能是更好的方法吗?

2 个答案:

答案 0 :(得分:2)

首先附加到DataFrame列表并且只持续一次concat,但仍然不确定8GB RAM是否足够(但我希望如此):

dfs = []

for num, fname in enumerate(files, start=1):
    print("File #{} | {}".format(num, fname))
    if len(fname) > 0:
        data = pd.read_excel(fname, 'Sheet0', index_col='Time', skiprows=3)
        dfs.append(data)

df = pd.concat(dfs, ignore_index=True)

答案 1 :(得分:0)

将Excel数据加载到Pandas中的速度非常慢。您的第一个选择是在数据框列表as described by jezrael上使用pd.concat一次。

否则,你有几个选择:

  1. 在Python之外有效地将Excel文件转换为CSV。例如,请参阅this answer。 Pandas可以更好地读取CSV文件。如果转换为csv.gz(gzipped),您可能会看到额外的改进。
  2. 考虑分类数据以改善内存管理;分块;或通过库进行惰性操作。有关详细信息,请参阅this answer
  3. 如果您的工作流程涉及"多次阅读"我强烈建议您从Excel转换为更适合熊猫的格式,例如CSV,HDF5或Pickle。