Объединение отдельных ежедневных CSV в pandas - PullRequest
2 голосов
/ 30 марта 2020

У меня есть куча CSV-файлов, каждый из которых назван в качестве даты, когда он был собран, ie. :

2020-03-21.csv
2020-03-22.csv
2020-03-23.csv
etc....

Я хотел бы создать один pandas DataFrame, содержащий данные из всех CSV, с новым столбцом даты, в котором указана дата, из которой получены данные. В качестве примера игрушки:

Текущий, одиночный CSV (например, 2020-03-19.csv):

Country           X         Y

Australia        10        14
China            24        16
Canada           18        35

Желаемый результат (объединенный фрейм данных):

Country           X         Y         Date

Australia        10        14       2020-03-19
China            24        16       2020-03-19
Canada           18        35       2020-03-19
Australia        14        16       2020-03-20
China            23        17       2020-03-20
Canada           20        38       2020-03-20
Australia        25        19       2020-03-21
etc...

Что такое лучший способ достичь этого в pandas? Я пробовал пару методов, используя pd.merge и pd.concat, но не повезло.

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Во-первых, вам нужно перечислить все пути CSV-файлов в вашей папке:

import glob
csvfiles = []
csvfiles = glob.glob("/path/to/folder/*.csv")
print(csvfiles)

Затем вы будете l oop поверх всех этих файлов и объединить их:

list_df = []
for csvfile in csvfiles:
    #read csv file to df
    df = pd.read_csv(csvfile)
    #get the filename ex: 2020-03-19
    csv_name = csvfile.split('/')[-1].split('.')[0]
    #create a new column with all values are filename ex: 2020-03-19
    df['Date'] = csv_name
    #add df to a list
    list_df.append(df)
#concat all the df in the list
final_df = pd.concat(list_df)
1 голос
/ 30 марта 2020

Это просто макет, но он должен работать: для простоты управления файлами используется модуль pathlib :

from pathlib import Path

#initialize path on directory
folder = Path(folder_name)

#no filters done here, since u r sure it a bunch of csv files

combo = (pd.read_csv(f)
         #stem is a pathlib method that extracts the name without the suffix
         #if the pd.to_datetime does not work, then discard it
         #and just assign f.stem to Date
         #u can convert to datetime after
         .assign(Date=pd.to_datetime(f.stem))
         for f in folder.iterdir())

#combine data into one dataframe
everything = pd.concat(combo, ignore_index = True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...