Как загрузить фрейм данных на основе имени файла CSV, содержащего метку времени - PullRequest
0 голосов
/ 16 октября 2019

Я считаю, что моя проблема действительно проста, и должен быть действительно простой способ решить эту проблему, однако, поскольку я совсем новичок в Python, особенно в pandas, я не мог разобраться с этим самостоятельно.

У меня есть сотни файлов CSV в следующем формате: text_YYYY-mm-dd_HH-MM-SS.csv, каждый CSV охватывает один час данных.

Я хочу иметь возможность доступа к файлам CSV на основена две переменные, которые называются startTime и EndTime, а затем я хочу собрать все файлы, которые находятся между этими датами в одном кадре данных. Поскольку у меня есть сотни фреймов данных, объединение всех в огромный фрейм данных, а затем фильтрация невозможны.

Так, например, если я установлю startTime = 2019-10-16 7:00:00 и EndTime = 2019-10-16 09:00:00, то я хочу собрать всеCSV-файлы, которые охватывают данные между этими временными интервалами в одном кадре данных. Поэтому, принимая только файлы csv text_2019-10-16_7:00:00, text_2019-10-16_8:00:00 и text_2019-10-16_9:00:00 в одном кадре данных.

Надеюсь, что мне удалось быть кратким и точным. Я был бы очень признателен за вашу помощь в этом! Предложения о том, что искать, также приветствуются

1 Ответ

1 голос
/ 16 октября 2019

Вы можете выполнить цикл по списку имен файлов и отфильтровать дату и время между началом и концом, затем создать DataFrame с помощью read_csv, добавить к list с именем out и последним использованием concat:

startTime = '2019-10-16 7:00:00'
EndTime = '2019-10-16 09:00:00'


files = ['text_2019-10-16_7:00:00.csv',
         'text_2019-10-16_8:00:00.csv',
         'text_2019-10-16_9:00:00.csv',
         'text_2019-10-16_19:00:00.csv']

startTime = pd.to_datetime(startTime)
EndTime = pd.to_datetime(EndTime)

out = []
for x in files:
    date = pd.to_datetime(x.split('_', 1)[1].split(.)[0], format='%Y-%m-%d_%H:%M:%S')
    if date >= startTime and date <= EndTime:
        out.append(pd.read_csv(x))

df = pd.concat(out, ignore_index)

Или:

from datetime import datetime

startTime = datetime.strptime(startTime, '%Y-%m-%d %H:%M:%S')
EndTime = datetime.strptime(EndTime, '%Y-%m-%d %H:%M:%S')

out = []
for x in files:
    date = datetime.strptime(x.split('_', 1)[1].split(.)[0],, '%Y-%m-%d_%H:%M:%S')
    if date >= startTime and date <= EndTime:
        out.append(pd.read_csv(x))

df = pd.concat(out, ignore_index)
...