我在多个(子)文件夹中有大约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()可能是更好的方法吗?
答案 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
一次。
否则,你有几个选择:
如果您的工作流程涉及"多次阅读"我强烈建议您从Excel转换为更适合熊猫的格式,例如CSV,HDF5或Pickle。