営業日の計算に関連するthis questionに続いて、両方ともNULL値を含む2つの営業日を計算したいとします。私は、マスクを使用して値を設定する方法が期待どおりに動作しないことを確認しました。マスクを使用してnumpy ndarrayの値を設定する
私は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山車の数を取得します)。 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
何をしているのですか?
マスクに問題がありますか? 'mask = pd.notnull(start)&pd.notnull(start)' 'pd.notnull(start)'をなぜ2回使用するのかよくわからないので、バグかもしれません。 – benten
ああ!残念ながら、これは、私がテストしていたコードでは、誤植ではありませんでした。しかし、良いキャッチ。 –
'start'と' end'はどのように作られていますか?私はあなたがしようとしていることを試してみて、それは私のために働くようです。 –