csv 正在向Dask DataFrame添加文件名列

xfyts7mz  于 2023-01-03  发布在  其他
关注(0)|答案(1)|浏览(117)

我有一个大约400个CSV文件的数据集,其中包含多个变量的时间序列(我的CSV文件有一个时间列,然后是其他变量的多个列)。
我的最终目标是选择一些变量,并将这400个时间序列绘制成一个图表。
为了做到这一点,我尝试使用Dask读取400个文件,然后绘制它们。
然而,据我所知,为了实际绘制400个时间序列,而不是一个附加的 Dataframe ,我应该按数据来自的文件名对数据进行分组。
有没有一种有效的方法可以向每个CSV添加一列,以便稍后可以按结果分组?
parquet 文件也是一个选项。
例如,我试着做这样的事情:

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(),但这样我就失去了所有的并行计算。
谢谢

xmjla07d

xmjla07d1#

如果您可以使用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不会删除并行性,代码只需确保在定义延迟任务之后完成实际计算。

相关问题