我在多个(子)文件夹中有大约5400个Excel文件,希望将它们加载到单个数据框中。这些文件只有一个工作表,每个工作表最多可以有2000行。总行数预计为200万或更多。
我的电脑有SSD硬盘和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方法花费了太多时间,因为它可能是动态重新分配内存?Conconat()可能是更好的方法吗?
首先附加到DataFrame
s列表中,最后只添加一次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)
将Excel数据加载到Pandas是出了名的慢。第一个选项是在jezrael描述的数据帧列表中使用pd.concat
一次。
否则,您有两个选择:
如果您的工作流程涉及“多次阅读”,我强烈建议您从Excel转换为更适合熊猫的格式,如CSV、HDF5或泡菜。