strftime 格式化 - 我做错了什么?

strftime formatting - what am I doing wrong?

我有一个字符串 3:01 AM - 2017 年 12 月 18 日

我已经编写了以下模式 strftime('%-I:%M %p - %-d %b %Y') 但我似乎无法让它工作,遵循 this

我的笔记:

df['tweet_date'] = pd.to_datetime(df['tweet_date'], errors='coerce').apply(lambda x: x.strftime('%I:%M %p - %d %b %Y')if not pd.isnull(x) else '')

在另一个具有类似列的数据框中,这有效:

df2['created_at'] = pd.to_datetime(df2['created_at'], errors='coerce').apply(lambda x: x.strftime('%Y-%m-%d %H:%M:%S')if not pd.isnull(x) else '')
df2['created_at'] = df2['created_at'].astype('datetime64[s]')`

格式化前的值如下所示,例如 2017-10-03T15:48:10.000Z

from datetime import datetime
str="3:01 AM - 18 Dec 2017"
date=datetime.strptime(str,"%I:%M %p - %d %b %Y")

要将字符串变成时间,请执行以下操作:

>>> import time
>>> s  = "3:01 AM - 18 Dec 2017"
>>> time.strptime(s,'%I:%M %p - %d %b %Y')
time.struct_time(tm_year=2017, tm_mon=12, tm_mday=18, tm_hour=3, tm_min=1, 
tm_sec=0, tm_wday=0, tm_yday=352, tm_isdst=-1)

% 后没有连字符。 official Python documentation.

中未提及

您的格式很好,但有些 os 不能对零填充单元使用否定格式。 datetime 应该能够解析 those 的填充和非填充实例就好了:

from datetime import datetime as dt

z_time = '06:48 PM - 03 Jun 2021'
nz_time = '6:48 PM - 3 Jun 2021'

dt.strptime(z_time, '%I:%M %p - %d %b %Y')
[out:] datetime.datetime(2021, 6, 3, 18, 48)

dt.strptime(nz_time, '%I:%M %p - %d %b %Y')
[out:] datetime.datetime(2021, 6, 3, 18, 48)

并且由于您是从 datetime 获取字符串,因此您应该查看 os 是否支持某些格式规则。这是一个 for windows.

我想弄清楚如何在 lambda 函数或更好的函数中使用 strftime,在我的数据框中的列转换为日期时间后使用 .dt 访问器

我无法解决这个问题,所以我选择了下一个最快的方法

from datetime import datetime
formatted_dates = []
for item in df.tweet_date:
    formatted_dates.append(datetime.strptime(item,"%I:%M %p - %d %b %Y"))
df.tweet_date = formatted_dates