timedelta64[ns] -> FutureWarning:不推荐传递 timedelta64-dtype 数据,将在未来版本中引发 TypeError

Posted

技术标签:

【中文标题】timedelta64[ns] -> FutureWarning:不推荐传递 timedelta64-dtype 数据,将在未来版本中引发 TypeError【英文标题】:timedelta64[ns] -> FutureWarning: Passing timedelta64-dtype data is deprecated, will raise a TypeError in a future version 【发布时间】:2019-11-15 09:40:33 【问题描述】:

假设df['time'] 来自timedelta64[ns]df['a'] 类型以及df['b'] 来自float64 类型,这两个系列可以这样绘制:

import pandas as pd
import matplotlib.pyplot as plt
fig, axs = plt.subplots(2, sharex=True)

time_values = pd.to_datetime(df['time'])
axs[0].plot(time_values, df['a'])
axs[1].plot(time_values, df['b'])
plt.show()

这可行..但给出以下警告:

FutureWarning: Passing timedelta64-dtype data is deprecated, will raise a TypeError in a future version

那么应该使用什么来代替pd.to_datetime 来将timedelta64[ns] 显示为matplotlib 中的人类可读时间?

【问题讨论】:

pd.to_timedelta? @QuangHoang import pandas as pd 【参考方案1】:

我在使用 pandas 从 SQL 读取时间数据时遇到了同样的问题。这两行解决了我的问题。我试图找到另一个直接的解决方案,但没有成功。

time_values = df['time'].apply(lambda x: np.nan if pd.isnull(x) else str(x)[-8:])
time_values = pd.to_datetime(time_values, format='%H:%M:%S').dt.time

【讨论】:

以上是关于timedelta64[ns] -> FutureWarning:不推荐传递 timedelta64-dtype 数据,将在未来版本中引发 TypeError的主要内容,如果未能解决你的问题,请参考以下文章

TypeError: cannot astype a timedelta from [timedelta64[ns]] to [int32]

在 Python Pandas DataFrame 中将 timedelta64[ns] 列转换为秒

从 numpy.timedelta64 值中提取天数

Pandas 数据类型

将带有 timedeltas 的 pandas 数据帧写入镶木地板

如何让 pandas.read_csv() 从 CSV 文件列中推断 datetime 和 timedelta 类型?