Преобразование из списка datetime в дату в Python для фильтрации кадра данных - PullRequest
0 голосов
/ 31 октября 2018

У меня есть следующая дата:

0   2019-06-29
Name: end date, dtype: datetime64[ns]

Это часть фрейма данных с именем data:

 data
    PointAlias       start Date    end date
 0   AO122732        2018-06-29    2019-06-29

тогда я преобразую его следующим кодом:

end_date_transformed = []
for x in range(len(data['end date'])):
    transf = pd.to_datetime(data['end date'][x]).date()
    end_date_transformed.append(transf)
end_date_transformed
output: [datetime.date(2019, 6, 29)]

Я хочу знать, возможно ли преобразовать его из списка в просто строку для применения datetime.datetime.strftime(end_date_transformed, %Y%m%d'). Есть ли способ сделать это? Конечная цель этого состоит в том, чтобы иметь возможность отфильтровывать фрейм данных дат, чтобы получить только те даты, которые <= end_date_transformed. Что-то вроде:

df
     date
0   2018-06-29
1   2018-10-29
2   2019-02-28
3   2019-06-29
4   2019-10-29
5   2020-02-29

df[df['date'] <= end_date_transformed] # This does not work, the output is:
ValueError: Arrays were different lengths: 44 vs 1

Я понимаю, что приведенный выше код не будет работать, но если я использую datetime.date (год, месяц, день) и использую его как end_date_transformed, он работает, поэтому проблема заключается в преобразовании даты окончания. Если кто-то может помочь, я буду благодарен. Большое спасибо, что нашли время, чтобы прочитать его и ответить.

1 Ответ

0 голосов
/ 31 октября 2018

Это должно работать для вас на одну дату окончания:

import pandas as pd
from datetime import datetime

data = pd.DataFrame([['A0122732','2018-06-29','2019-06-29']], columns=['PointAlias','start date','end date'])

df = pd.DataFrame([
['2018-06-29'],
['2018-10-29'],
['2019-02-28'],
['2019-06-29'],
['2019-10-29'],
['2020-02-29']],
columns=['date'])

df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d')

end_date = datetime.strptime(data['end date'].values[0], '%Y-%m-%d')

df[df['date'] <= end_date]

Возвращает:

        date
0 2018-06-29
1 2018-10-29
2 2019-02-28
3 2019-06-29
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...