У меня есть ситуация, когда мои данные хранятся в S3 по дате. Таким образом, в области с именем mydata
папка 2020-01-01
содержит один файл CSV, затем папка 2020-01-02
содержит другой файл CSV и так далее. Я хочу написать функцию, в которой пользователь вводит дату начала и дату окончания, а функция считывает все CSV-файлы между этими датами и объединяет их в один фрейм данных. Один из способов сделать это - ниже, но это кажется неуклюжим и медленным. Есть ли способ лучше?
# Load libraries
import pandas as pd
import dask.dataframe as dd
# Define bucket, and start and end dates
bucket = 'mydata'
start_date = '2019-07-09'
end_date = '2019-07-12'
def read_data(bucket, start_date, end_date):
# Initialize list of dataframes
dfs = []
# Get range of dates from which to read data
time_range = pd.date_range(start=start_date, end=end_date, freq='D')
# Read data for each date and append to dfs
for dte in time_range:
d = str(dte).split(' ')[0]
df = dd.read_csv('s3://{}/{}/*.csv'.format(bucket, d)).compute()
dfs.append(df)
# Concatenate dfs into one df
merged_df = pd.concat(dfs, 0)
return merged_df