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

时间:2019-10-26 00:45:18

标签: pandas dask

我要导入4000多个具有相同列的csv文件,columns=['Date', 'Datapint']可以很方便地导入csv,并且对我来说很好。

file_paths = '/root/data/daily/'
df = dd.read_csv(file_paths+'*.csv',
                 delim_whitespace=True,
                 names=['Date','Datapoint'])

我要实现的任务是能够将'Datapoint'列命名为.csv的文件名。我知道您可以使用include_path_column = True将一列设置为路径。但是我想知道是否有一种简单的方法将该路径名用作列名,而不必在行中单独运行。

2 个答案:

答案 0 :(得分:1)

我可以使用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)

答案 1 :(得分:1)

我不清楚您到底想完成什么。如果您只是想更改写入文件路径的列的名称,则可以设置include_path_column='New Column Name'。如果您要根据每个文件的路径来命名一列,则似乎将数据连接起来会得到一个相当稀疏的数组,而我认为groupby可能会更好。