向Dask DataFrame中添加文件名列



我有一个大约400个CSV文件的数据集,其中包含多个变量的时间序列(我的CSV有一个时间列,然后是其他变量的多个列)。

我的最终目标是选择一些变量并将这400个时间序列绘制成一个图。

为了做到这一点,我尝试使用Dask读取400个文件,然后绘制它们。

然而,根据我的理解,为了实际绘制400个时间序列,而不是一个附加的数据帧,我应该按数据的文件名分组。

是否有任何任务有效的方法来添加列到每个CSV,以便我以后可以分组我的结果?

parquet files也是一个选项。

例如,我试着这样做:

import dask.dataframe as dd
import os
filenames = ['part0.parquet', 'part1.parquet', 'part2.parquet']
df = dd.read_parquet(filenames, engine='pyarrow')
df = df.assign(file=lambda x: filenames[x.index])
df_grouped = df.groupby('file')

我明白我可以使用from_delayed(),但这样我就失去了所有的并行计算。

谢谢

如果您可以使用CSV文件,那么传递include_path_column选项可能足以满足您的目的:

from dask.dataframe import read_csv
ddf = read_csv("some_path/*.csv", include_path_column="file_path")
print(ddf.columns)
# the list of columns will include `file_path` column

对于read_parquet没有等效的选项,但对于delayed可以实现类似的功能。使用delayed不会消除并行性,代码只需要确保在定义延迟任务后完成实际计算。

最新更新