python - 使用pyarrow读取保存为镶木地板的DataFrame,将文件名保存在列中
问题描述
我想阅读一个文件夹,里面装满了包含 pandas DataFrames 的镶木地板文件。除了我正在读取的数据之外,我还想将从中读取数据的文件名存储在“file_origin”列中。在熊猫中,我可以这样做:
import pandas as pd
from pathlib import Path
data_dir = Path("path_of_folder_with_files")
df = pd.concat(
pd.read_parquet(parquet_file).assign(file_origin=parquet_file.name)
for parquet_file in data_dir.glob("*")
)
不幸的是,这很慢。有没有类似的方法可以用 pyarrow (或任何其他有效的包)来做到这一点?
import pyarrow.parquet as pq
table = pq.read_table(data_dir, use_threads=True)
df = table.to_pandas()
解决方案
您可以使用箭头而不是熊猫来实现它:
batches = []
for file_name in data_dir.glob("*"):
table = pq.read_table(file_name)
table = table.append_column("file_name", pa.array([file_name]*len(table), pa.string()))
batches.extend(table.to_batches())
return pa.Table.from_batches(batches)
我不认为它会明显更快,除非你的表中有很多字符串和对象(在熊猫中很慢)。
推荐阅读
- r - 在 Ubuntu 18.04 和 R 4.0.2 上安装 tidyr 时出错
- c++ - 如何突出显示忍者构建系统产生的错误?
- angular - Angular - 反应形式 valueChanges。避免嵌套订阅
- python - 分析按不同列分组的 2 列
- entity-framework - Microsoft EntityFramework Core CLI 安装 - nuget 异常
- vega - 使用“触发器”将信号插入到 Vega 数据中,被平面映射
- javascript - 如何在 JavaScript 中的动态样式中避免过渡
- python - 错误:未能将一些参考资料推送到“https://github.com/E-wave112/myadmissionportalsite2.git”
- java - Minecraft 1.15 Forge Bullet mod 未渲染
- typescript - 将来自其他对象的参数作为已定义类型打字稿中的参数传递。对象字面量只能指定已知属性,ts(2345)