gpt4 book ai didi

python - 使用掩码为 numpy ndarray 设置值

转载 作者:行者123 更新时间:2023-11-28 18:29:26 26 4
gpt4 key购买 nike

我想计算两个时间之间的工作日,这两个时间都包含空值,在 this question 之后与计算工作日有关。我发现我使用掩码设置值的方式并不像预期的那样。

我使用的是 python 2.7.11、pandas 0.18.1 和 numpy 1.11.0。我稍微修改过的代码:

import datetime
import numpy as np
import pandas as pd

def business_date_diff(start, end):
mask = pd.notnull(start) & pd.notnull(end)
start = start[mask]
end = end[mask]
start = start.values.astype('datetime64[D]')
end = end.values.astype('datetime64[D]')
result = np.empty(len(mask), dtype=float)
result[mask] = np.busday_count(start, end)
result[~mask] = np.nan
return result

不幸的是,这不会返回预期的工作日差异(相反,我得到了一些非常接近 0 的 float )。当我检查 np.busday_count(start, end) 时,结果看起来是正确的。

print start[0:5]
print end[0:5]
print np.busday_count(start, end)[0:5]

# ['2016-07-04' '2016-07-04' '2016-07-04' '2016-07-04' '2016-07-04']
# ['2016-07-05' '2016-07-05' '2016-07-05' '2016-07-06' '2016-07-06']
# [1 1 1 2 2]

但是当我检查 results 的值时,结果没有意义:

...
result = np.empty(len(mask), dtype=float)
result[mask] = np.busday_count(start, end)
result[~mask] = np.nan
print result

# [ nan nan 1.43700866e-210 1.45159738e-210
# 1.45159738e-210 1.45159738e-210 1.45159738e-210 1.46618609e-210
# 1.45159738e-210 1.64491834e-210 1.45159738e-210 1.43700866e-210
# 1.43700866e-210 1.43700866e-210 1.43700866e-210 1.45159738e-210
# 1.43700866e-210 1.43700866e-210 1.43700866e-210 1.43700866e-210

我做错了什么?

最佳答案

您的问题是,对于您的 numpy 版本,您不能使用 bool 数组作为数组的索引。只需使用 np.where(mask==True) 代替 mask 和 np.where(mask==False) 代替 ~mask,它就会按预期工作。

关于python - 使用掩码为 numpy ndarray 设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38663530/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com