Pandas 使用dask read_csv将文件名作为列名读取

Pandas 使用dask read_csv将文件名作为列名读取,pandas,dask,Pandas,Dask,我正在导入4000多个csv文件,所有文件都有相同的列,columns=['Date','Datapint']将csv导入dask非常简单,对我来说效果很好 file_paths = '/root/data/daily/' df = dd.read_csv(file_paths+'*.csv', delim_whitespace=True, names=['Date','Datapoint']) 我试图完成的任务是能够将'Da

我正在导入4000多个csv文件,所有文件都有相同的列,
columns=['Date','Datapint']
将csv导入dask非常简单,对我来说效果很好

file_paths = '/root/data/daily/'
df = dd.read_csv(file_paths+'*.csv',
                 delim_whitespace=True,
                 names=['Date','Datapoint'])
我试图完成的任务是能够将
'Datapoint'
列命名为.csv的文件名。我知道您可以使用
include\u path\u column=True将列设置为路径。但我想知道是否有一种简单的方法可以将该路径名用作列名,而不必再运行一个单独的步骤。

我可以使用dask的延迟函数(相当直接地)来实现这一点:

import pandas as pd
import dask.dataframe as dd
from dask import delayed
import glob

path = r'/root/data/daily' # use your path
file_list = glob.glob(path + "/*.csv")

def read_and_label_csv(filename):
    # reads each csv file to a pandas.DataFrame
    df_csv = pd.read_csv(filename,
                         delim_whitespace=True,
                         names=['Date','Close'])                 
    df_csv.rename(columns={'Close':path_2_column}, inplace=True)
    return df_csv

# create a list of functions ready to return a pandas.DataFrame
dfs = [delayed(read_and_label_csv)(fname) for fname in file_list]
# using delayed, assemble the pandas.DataFrames into a dask.DataFrame
ddf = dd.from_delayed(dfs)

我不清楚你到底想完成什么。如果您只是试图更改文件路径写入的列的名称,则可以设置
include\u path\u column='New column name'
。如果您根据每个文件的路径命名列,那么一旦数据连接起来,您将得到一个相当稀疏的数组,我认为groupby可能会更好。

我有4000多个文本文件,所有这些文件都具有datetime索引。每个文件包含一列和一个数据点列。如果我不知道某些文件的名字,我怎么可能只调用它们来计算呢。啊,好吧,这很有意义。我认为没有现成的方法可以做到这一点。如果支持pivot,那么这可能是一个不错的选择。我想为了简化您的答案,您可以在read_csv函数本身中将的名称设置为文件名的某个部分:
python df_csv=pd.read_csv(文件名,delim_whitespace=True,name=['Date',path_2_column])