环境信息
- meteva 1.9.6(master 最新代码同样存在该问题)
- pandas 3.0.3(pandas ≥ 2.0 均可复现)
- numpy 1.26.4,Python 3.11.11,Windows
问题现象
from meteva import base as meb
sta = meb.read_station(meb.station_国家站)
print(sta) # 返回 None
并提示"文件格式不能识别。可能原因:文件未按micaps3格式存储",
meteva 自带的 micaps3 站点文件均无法读取。加 show=True 可见真实
异常:TypeError: Invalid value '2099-01-01 08:00:00' for dtype 'float64'(read_stadata.py 第 244 行 sta.loc[:,"time"] = time_file)。
根因分析
sta_data() 通过 reindex 创建的 time 列为 float64(NaN 列);
- pandas ≥ 2.0 起,
.loc 向 float64 列写入 datetime 标量会抛
TypeError(pandas 1.x 为静默强转,故老环境不暴露);
- 异常被裸 except 吞掉,误报为"文件格式不能识别"。
影响面:所有经 sta_data() 构造后再给 time 列赋值的读取器
(micaps3 系列)及 set_stadata_coords。
建议修复(AI初拟待确认)
仅需修改 meteva/base/basicdata/sta_data.py 一个文件:
import copy
import numpy as np
+import pandas as pd
import meteva
@@
sta = sta.reindex(columns = new_columns)
#dframe1 = dframe1[new_columns]
+
+ sta['time'] = pd.to_datetime(sta['time'])
time 列在构造时即为 datetime64[ns],下游各读取器和
set_stadata_coords 的 .loc 赋值无需改动即可恢复。已在本地
(meteva 1.9.6 + pandas 3.0.3)验证 read_station 及 micaps3 各
读取函数恢复正常,供维护者参考,请 review 确认。
附件:sta_data.py
联系方式
环境信息
问题现象
并提示"文件格式不能识别。可能原因:文件未按micaps3格式存储",
meteva 自带的 micaps3 站点文件均无法读取。加
show=True可见真实异常:
TypeError: Invalid value '2099-01-01 08:00:00' for dtype 'float64'(read_stadata.py第 244 行sta.loc[:,"time"] = time_file)。根因分析
sta_data()通过reindex创建的time列为 float64(NaN 列);.loc向 float64 列写入 datetime 标量会抛TypeError(pandas 1.x 为静默强转,故老环境不暴露);
影响面:所有经
sta_data()构造后再给time列赋值的读取器(micaps3 系列)及
set_stadata_coords。建议修复(AI初拟待确认)
仅需修改
meteva/base/basicdata/sta_data.py一个文件:time列在构造时即为datetime64[ns],下游各读取器和set_stadata_coords的.loc赋值无需改动即可恢复。已在本地(meteva 1.9.6 + pandas 3.0.3)验证
read_station及 micaps3 各读取函数恢复正常,供维护者参考,请 review 确认。
附件:sta_data.py
联系方式