我正在使用 python 3.10.6。我有这个函数,它接受一个 netcdf 文件,并从该文件的数据中为 dmin 和 dmax 分配时间索引的最小和最大日期。每当 dmin 低于 1970(即 1969 及以下)时,我都会收到以下错误:
xmin = datetime.utcfromtimestamp((dmin - sec0) / sec1).date() OSError:
[Errno 22] 参数无效
这是我的代码:
def get_minmax_date(data):
dmin = data['time'].values.min()
dmax = data['time'].values.max()
sec0 = np.datetime64(0, 's')
sec1 = np.timedelta64(1, 's')
xmin = datetime.utcfromtimestamp((dmin - sec0) / sec1).date()
xmax = datetime.utcfromtimestamp((dmax - sec0) / sec1).date() + timedelta(days=1)
return xmin, xmax
我知道这是日期时间库中的一个错误,但有什么解决方法吗?
由于您似乎已经在使用 pandas,因此最好简化为
import pandas as pd
def get_minmax_date(data):
dmin = data['time'].min() # use pandas.Timestamp here...
dmax = data['time'].max()
xmin = dmin.date()
xmax = (dmax + pd.Timedelta(days=1)).date()
return xmin, xmax
df = pd.DataFrame({"time":[pd.Timestamp("now"), pd.Timestamp("now")]})
print(get_minmax_date(df))
# (datetime.date(2023, 3, 25), datetime.date(2023, 3, 26))
您还可以通过删除对
.date()
的调用并改用 .floor("d")
来始终如一地使用 pd.Timestamps。请注意,pandas datetime 中没有日期和时间的分离。