在Python中将日期时间列表转换为日期以过滤datafram

2024-06-26 14:51:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下一个约会:

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

这是名为data的dataframe的一部分:

^{pr2}$

然后用下一个代码对其进行转换:

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

我明白上面的代码行不通,但是如果我日期时间.日期(年、月、日)并像end_date_transformed一样使用它,所以问题在于结束日期的转换。 如果有人能帮忙,我会很感激的。 非常感谢您抽出时间阅读并回答问题。在


Tags: 代码namedfoutputdatadatetimedate时间
1条回答
网友
1楼 · 发布于 2024-06-26 14:51:13

这应该适用于您的单一结束日期:

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]

退货:

^{pr2}$

相关问题 更多 >