首页 > 解决方案 > 使用 matplotlib 时将 'cftime._cftime.DatetimeGregorian' 转换为浮点数

问题描述

在分析来自 CRU 的气候数据时,我正在使用 netcdf4 包。我能够获得每月温度的时间序列图。2011 年至 2019 年喀布尔市的变化。

fig = plt.figure(figsize=(12,4))
ax = fig.add_subplot(111)
plt.plot(time,global_average)
ax.set_xlabel('Time(in days since Jan 1,1901)')
ax.set_ylabel('Monthly Temperature')
ax.set_title('Variation of Monthly Temperature in Kabul City')
plt.show()

这里的time变量是自 以来的天数Jan 1,1900

在此处输入图像描述

但我正在尝试将时间轴添加为“01-01-2011”、02-01-2012 等值。我试图将时间维度转换为cftime.DatetimeGregorian使用以下函数;

t = netCDF4.num2date(temp_data_2011_2019.variables['time'][:],temp_data_2011_2019.variables['time'].units,\
                     temp_data_2011_2019.variables['time'].calendar)

这有效并给了我一个蒙面数组。但是当将此参数np.ma.getdata(t) 放在绘图命令中时,会出现错误

TypeError:float() 参数必须是字符串或数字,而不是 'cftime._cftime.DatetimeGregorian'

可以使用另一种方法在折线图中获取所需格式的日期吗?

标签: matplotlibnetcdf4

解决方案


我不知道 cftime,但为什么不使用pd.to_datetime来进行转换呢?

示例输入:

df = pd.DataFrame({'date': ['Jan 1, 1900', 'Aug 8, 2021']})
          date
0  Jan 1, 1900
1  Aug 8, 2021

转换:

pd.to_datetime(df['date'], format='%b %d, %Y')

输出:

0   1900-01-01
1   2021-08-08
Name: date, dtype: datetime64[ns]

如果您想获取 DD-MM-YYYY 格式的字符串:

pd.to_datetime(df['date'], format='%b %d, %Y').dt.strftime('%d-%m-%Y')

输出:

0    01-01-1900
1    08-08-2021
Name: date, dtype: object

推荐阅读