Python 数据框将时间日期 'SylmiSeb' (2018-12-31 23:43:02+00:00) 转换为日期时间

时间:2021-06-03 20:34:32

标签: python pandas date datetime

我正在尝试使用 pd.to_datetime 将样式 2018-12-31 23:43:02+00:00 的列转换为 2018-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

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

试试:

database_2018['date_created'] = database_2018['date_created'].apply(
    lambda x: x[:x.rfind(':')] + x[x.rfind(':')+1:]
)

database_2018['date_created'] = pd.to_datetime(
database_2018['date_created'], format='%Y-%m-%d %H:%M:%S%z')

这是您的日期格式,其中 %z 代表 UTC 偏移量。有关详细信息,请参阅日期时间 documentation。 UTC 偏移量需要没有冒号字符。所以上面代码的第一部分删除了那个冒号。

答案 1 :(得分:0)

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