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的主要内容,如果未能解决你的问题,请参考以下文章