在Pandas中显示不带小时、分钟和秒的Python日期时间

u2nhd7ah  于 2023-01-11  发布在  Python
关注(0)|答案(2)|浏览(247)

我有一个日期字符串,并希望将其转换为日期类型:
我已经尝试使用pd.to_datetime与我想要的格式,但它是返回时间没有转换。

df = pd.DataFrame({
    'date': ['2010-12-30 23:57:10+00:00', '2010-12-30 23:52:41+00:00','2010-12-30 23:43:04+00:00','2010-12-30 23:37:30+00:00','2010-12-30 23:31:39+00:00'],
    'text' : ['El odontólogo Barreda, a un paso de quedar en …','Defederico es el nuevo refuerzo de Independien..','Israel: ex presidente Katzav declarado culpabl…'
        , 'FMI estima que la recuperación asimétrica de l…','¿Quién fue el campeón argentino del año? Votá …']
}) 

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

这是返回的输出
2010-12-30 23:57:10+00:00
我需要排除
23:57:10+00:00 .

6qftjkof

6qftjkof1#

它是一个datetime 对象,所以需要保存时间信息,但是,这里有一个Period数据类型:它表示时间的 * 跨度 * 而不是 * 戳 *:

df["new date"] = pd.to_datetime(df["date"]).dt.to_period(freq="D")

转换为 D 日周期以获得

>>> df["new date"]

0    2010-12-30
1    2010-12-30
2    2010-12-30
3    2010-12-30
4    2010-12-30
Name: new date, dtype: period[D]

注意到这些不是字符串;因此可以继续执行基于X1 MON 1X的操作。
但是,如果确实需要datetime类型,则可以.normalize()时间戳,以表明时间组件是无关紧要的,它们都设置为午夜:

>>> df["new date"] = pd.to_datetime(df["date"]).dt.normalize()
>>> df["new date"]

0   2010-12-30 00:00:00+00:00
1   2010-12-30 00:00:00+00:00
2   2010-12-30 00:00:00+00:00
3   2010-12-30 00:00:00+00:00
4   2010-12-30 00:00:00+00:00
Name: new date, dtype: datetime64[ns, UTC]

注意,在标准化之后,如果原始日期时间戳没有附加时区信息,即“+"之后的部分,则显示器通常不显示全零时间信息;在你的例子中,他们确实有,所以我们在输出中也看到了零,如果你想在这种情况下摆脱它,你可以链接.dt.tz_convert(tz=None)来摆脱时区信息,从而在输出中摆脱全零,尽管如此,输出是datetime类型的。
最后,如果它完全是为了 * 显示 * 目的,那么我们可以使用.strftime将它们整形为所需的格式:

>>> df["new date"] = pd.to_datetime(df["date"]).dt.strftime("%Y-%m-%d")
>>> df["new date"]

0    2010-12-30
1    2010-12-30
2    2010-12-30
3    2010-12-30
4    2010-12-30
Name: new date, dtype: object

正如您所看到的,数据类型是“object”,即这里的string,这将阻止基于日期时间的操作,例如,df["new date"].dt.month将不再像前两种选择那样工作。

ovfsdjhp

ovfsdjhp2#

要保留DatetimeIndex及其dt访问器,可以使用dt.normalize()重置时间部分,然后使用dt.tz_convert删除时区信息:

df['new date'] = pd.to_datetime(df["date"]).dt.normalize().dt.tz_convert(None)

产出

>>> df['new date']
0   2010-12-30
1   2010-12-30
2   2010-12-30
3   2010-12-30
4   2010-12-30
Name: new date, dtype: datetime64[ns]

相关问题