python - 将多个 Excel 文件加载到 Pandas 中
问题描述
我在多个(子)文件夹中有大约 5400 个 Excel 文件,并希望将它们加载到单个数据框中。这些文件只有一张纸,每个文件最多可以有 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() 可能是更好的方法吗?
解决方案
首先追加到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)
推荐阅读
- javascript - 是否可以为多实例 tinyMCE 的每个实例定义一个强制根块?
- uibutton - 您可以在关闭之外更改 IBAction 按钮的状态吗?- 斯威夫特 4
- php - 基于 OpenWRT 网络的 MP3 播放器
- node.js - 我想使用 NodeJS 中的 redis 库在 Redis 中的 hset 特定键中设置 Expiry
- python - 使用 .GET[] 时 /count/ 处的 MultiValueDictKeyError
- php - 上传时在 CodeIgniter 中调整图像大小并将调整后的图像保存在目录中
- javascript - 使用节点 js 和 socket.io 在 mysql 数据库中插入新记录时如何通知和更新客户端
- flutter - 在颤振应用程序中实现地点选择器对话框
- yii2 - 和以前一样,即使对于经过身份验证的用户,请求也总是重定向到登录页面
- mysql - 如何选择包含多个标签的 id?