Skip to content

pandas ≥ 2.0 下 read_station 读取站点文件失败:time 列 dtype 不兼容 #193

Description

@yinlb3

环境信息

  • 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)。

根因分析

  1. sta_data() 通过 reindex 创建的 time 列为 float64(NaN 列);
  2. pandas ≥ 2.0 起,.loc 向 float64 列写入 datetime 标量会抛
    TypeError(pandas 1.x 为静默强转,故老环境不暴露);
  3. 异常被裸 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

联系方式

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions