Я сохранил все ежедневные отчеты о продажах в общей папке. каждый файл назван с соответствующей датой. например: 01-01-2019-Sales.csv, 02-01-2019-Sales.csv и т. д. все файлы сохраняются в пути к папке «C:\Desktop\Sales». теперь я хочу извлечь и объединить все файлы с 01.05.2019 по 02.04.2019.
Я знаю, что могу извлечь все файлы с пандами, используя приведенный ниже код.
import pandas as pd
import glob
import os
file_path = r'C:\Desktop\Sales'
all_files = glob.glob(os.path.join(file_path,'*.csv'))
df = pd.concat([pd.read_csv(f) for f in all_files], sort=False)
Но мой вопрос в том, как я могу извлечь файлы между двумя заданными датами, используя pandas/python. (используя имена файлов, которые были сохранены с датой) например ; извлечь только файлы с 01.05.2019 по 02.04.2019.
Что насчет этого
start_date = "05-01-2019"
end_date = "04-02-2019"
all_csv_files = [x for x in os.listdir(file_path) if x.endswith('.csv')]
correct_date_files = [x for x in all_csv_files
if x >= start_date + "-Sales.csv" and x <= end_date + "-Sales.csv"]
df = pd.concat([pd.read_csv(f) for f in correct_date_files], sort=False)
По сути, вы просто перечисляете все файлы .csv
в своем каталоге и берете только те, которые находятся между выбранными датами.
Я думаю, что этот кусок кода поможет вам
import datetime
d1 = datetime.date(2019,1,1)
d2 = datetime.date(2019,2,1)
d3 = datetime.date(2019,1,20)
d4 = datetime.date(2019,2,20)
print(d1<d3<d2)
# True
print(d1<d4<d2)
# False
Используйте даты для сравнения:
import pandas as pd
import glob
import os
from time import strptime
file_path = r'C:\Desktop\Sales'
all_files = glob.glob(os.path.join(file_path,'*.csv'))
start_date = strptime('04-02-2019', '%m-%d-%Y')
end_date = strptime('05-01-2019', '%m-%d-%Y')
df = pd.concat([pd.read_csv(f) for f in all_files
if start_date < strptime(f, '%d-%m-%Y.csv') < end_date],
sort=False)
Даты можно сравнивать лексически с изменением на гггг-мм-дд.
L = [ '01-01-2019-Sales.csv', '02-01-2019-Sales.csv']
>>> start = '2018-12-01'
>>> end = '2019-02-01'
>>> for file in L:
m, d, yr = file.split('-')[:3]
date = '-'.join([yr, m, d])
if start <= date <= end:
print(file)
01-01-2019-Sales.csv
02-01-2019-Sales.csv