繁体   English   中英

在Pandas中显示Python没有时分秒的日期时间

[英]Display Python datetime without hours, minutes and seconds in Pandas

我有一个日期字符串,想将其转换为日期类型:

我尝试将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")

即返回的 output

2010-12-30 23:57:10+00:00

我需要消除

23:57:10+00:00

那么它是一个日期时间object,所以它需要保留时间信息。 但是,有一个 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]

注意这些不是字符串; 因此可以继续执行基于.dt的操作。


但是,如果您确实需要日期时间类型,则可以.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]

注意到规范化后,如果原始日期时间戳没有附加时区信息,即“+”之后的部分,显示器通常不会显示全零时间信息; 在你的情况下,他们确实有它,所以我们在 output 中也看到了零。 如果你想在这种情况下摆脱它,你可以链接.dt.tz_convert(tz=None)以摆脱时区信息,因此 output 中的全零。仍然,output 是日期时间类型。


最后,如果它完全是为了显示目的,那么我们可以使用.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”,即这里的字符串,这将阻止基于日期时间的操作,例如, df["new date"].dt.month将不再像前两个备选方案那样工作。

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

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

Output

>>> 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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM