matplotlib - 使用 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'
可以使用另一种方法在折线图中获取所需格式的日期吗?
解决方案
我不知道 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
推荐阅读
- salesforce - 即使通过更改 Salesforce 上的设置来扩展相同的密码,Salesforce 身份验证也会失败
- javascript - 为什么 setTimeout(.., 0) 在 Firefox 中的浏览器操作之前触发?漏洞?
- python - 从请求中获取布尔值
- rest - 如何通过给定配置的 **rest** api 推送 docker 映像
- delphi - Delphi XE4 通用包装器中的无效类型
- azure - 通过 Azure CLI 复制容器并等待结果
- angular - 使用角度数据表时出现 Angular 6 页面重定向问题
- r - 如何使用 lapply 按行号范围对列表中的数据框进行子集化?
- macos - Homebrew:无法通过 brew (macOS Mojave) 安装选项
- python - 从 pandas df 中选择行,其中索引出现在另一个 df 的某处