我正在尝试使用 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
感谢您的帮助!
答案 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