无法在现有数据帧中将多个Pandas列从Object类型转换为Datetime类型(就地更新)



我有一个Pandas数据框架,它有十多列,其中大多数列都是Pandas的"对象"类型。

我需要将其中三列从"object"类型转换为"datetime"类型,并写回现有的数据帧列(以执行">就地更新"(。

我只使用以下代码作为一列的起点,并计划在其他两列中对其进行扩展,但它不起作用。

">bigframe"数据帧有许多重复行。我正在删除基于">incidentId"的重复行,并将唯一行分配给下面的">警报。"。

alerts = bigframe.drop_duplicates(subset=['incidentId'])
alerts['firstEventTime'] = pd.to_datetime(alerts['firstEventTime'])

警报["第一事件时间"]的内容类似于">2021-027 22:34:05.991031+00:00">

我收到以下警告,但代码的执行完成时没有出现错误。

">试图在DataFrame的切片副本上设置值。尝试使用.loc[row_indexer,col_indexer]=value来代替">

当我键入">alerts.dtypes"时,我仍然会看到此列列列为">对象"类型。因此,我假设由于某种原因,操作没有写回原始数据帧。

我在互联网上搜索了一下,上面列出的代码本应有效,但事实并非如此。所以我一定做错了什么,但我找不到。你能告诉我我做错了什么吗?

谢谢!

这里有两个不相关的问题;

#1DataFrame.drop_duplicates返回现有df的切片,而不是新df。您可以通过显式地将结果复制到新的df中来避免出现警告。

#2 pandas日期时间dtype无法处理一个系列中的混合UTC偏移量。在这种情况下,它又回到了使用Python的日期时间,即元素的类型为datetime.datetime,显示为"object"。您可以通过使用关键字utc=True转换为UTC来处理此问题。

例如:

bigframe = pd.DataFrame({'incidentId': [1,1,2],
'firstEventTime': ['2021-01-27 22:34:05.991031+00:00',
'2021-01-27 22:34:05.991031+00:00', 
'2022-01-18 20:34:52']})
# avoid the warning by explicitly calling .copy():
alerts = bigframe.drop_duplicates(subset=['incidentId']).copy()
# now convert to datetime in UTC, to get a datetime64[ns] dtyped Series:
alerts['firstEventTime'] = pd.to_datetime(alerts['firstEventTime'], utc=True)
alerts['firstEventTime']
# 0   2021-01-27 22:34:05.991031+00:00
# 2          2022-01-18 20:34:52+00:00
# Name: firstEventTime, dtype: datetime64[ns, UTC]

请注意,如果未指定UTC偏移量,panda将假定输入为UTC。

相关内容

最新更新