首页 > 解决方案 > Python数据框将时间日期'SylmiSeb'(2018-12-31 23:43:02+00:00)转换为日期时间

问题描述

我正在尝试使用 pd.to_datetime 将样式2018-12-31 23:43:02+00:002018-12-31转换。我通过使用 snscrape 库 ( https://github.com/JustAnotherArchivist/snscrape ) 获得了这个数据库。

但是,当我尝试这个时:

database_2018['date_created'] =  
pd.to_datetime(database_2018['date_created'], 
infer_datetime_format=True)

我收到以下错误:ParserError:未知字符串格式:SylmiSeb

当我询问此列日期的 dtype 时,它​​显示为对象类型。关于如何解决这个问题的任何想法?

我也试过:

 database_2018['date_created'] =   
 pd.Timestamp(database_2018['date_created'])
 .to_datetime()

但我收到以下错误:

TypeError: Cannot convert input [0         2018-12-31 23:43:02+00:00
1         2018-12-31 23:30:20+00:00
2         2018-12-31 23:30:00+00:00
3         2018-12-31 23:28:09+00:00
4         2018-12-31 23:28:08+00:00
                    ...            
105037    2018-01-01 00:29:18+00:00
105038    2018-01-01 00:25:04+00:00
105039    2018-01-01 00:10:03+00:00
105040    2018-01-01 00:03:28+00:00
105041    2018-01-01 00:00:44+00:00
Name: date_created, Length: 105042, dtype: object] of type <class 'pandas.core.series.Series'> to Timestamp

谢谢您的帮助 !

标签: pythonpandasdatedatetime

解决方案


IIUC 您正在尝试仅从具有时区的日期时间列中获取日期。

设置

d="""date_created
2018-12-31 23:30:20+00:00
2018-12-31 23:30:00+00:00
2018-12-31 23:28:09+00:00
2018-12-31 23:28:08+00:00"""
df=pd.read_csv(StringIO(d))
df

    date_created
0   2018-12-31 23:30:20+00:00
1   2018-12-31 23:30:00+00:00
2   2018-12-31 23:28:09+00:00
3   2018-12-31 23:28:08+00:00

代码

选项1

df['date_created'] = pd.to_datetime(df.date_created,errors='coerce').dt.date
df

输出

    date_created
0   2018-12-31
1   2018-12-31
2   2018-12-31
3   2018-12-31

选项 2,如果我们想删除时区

为了理解时区,如果您只想删除时区。

df['date_created'] = pd.to_datetime(df.date_created,errors='coerce').dt.tz_localize(None)
df

输出

    date_created
0   2018-12-31 23:30:20
1   2018-12-31 23:30:00
2   2018-12-31 23:28:09
3   2018-12-31 23:28:08

推荐阅读