teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

コメント追加

2020/04/27 00:59

投稿

退会済みユーザー
answer CHANGED
@@ -70,13 +70,23 @@
70
70
 
71
71
  ```
72
72
 
73
- とあり、ignoring NaNsと言うことでNaNは敢えて無視しています。skipnaがデフォルトでTrueなのでFalseにすればNaNが返るらしいことが分かります。試してみた結果
73
+ とあり、ignoring NaNsと言うことでNaNは敢えて無視しています。
74
74
 
75
+ _get_valuesではmaskと言う入力したaと同じサイズの行列を作り、NaNに対してはTrueそれ以外はFalseをセットし、最後にnp.putmaskでmaskがTrueの要素は強制的に0にした値をnansumに返しています。Numpyにputmaskなんて関数があったんですね。知りませんでした。これでほぼ動作が全て解明されました。
76
+
75
77
  ```Python3
78
+ np.putmask(values, mask, fill_value)
79
+ ```
80
+
81
+ ところでskipnaがデフォルトでTrueなのでFalseにすればNaNが返るらしいことが分かりましたので。試してみた結果
82
+
83
+ ```Python3
76
84
  print(a.sum(skipna=False))
77
85
 
78
86
  A NaN
79
87
  B 5.0
80
88
  C NaN
81
89
  dtype: float64
82
- ```
90
+ ```
91
+
92
+ 以上ご参考まで。

1

コメント追加

2020/04/27 00:59

投稿

退会済みユーザー
answer CHANGED
@@ -1,3 +1,5 @@
1
+ 既に回答は上がっていますし、sum()のドキュメントにも記述があるようですが、僕はちゃんと理由を突き止めたいので、ソースをいつも確認します。
2
+
1
3
  PyCharmなどIDEを使っていれば、.sum()の定義へ簡単に飛べますので、答えにたどり着くまで探します。(バイナリのモジュールにたどり着いてソースが不明なこともありますが)
2
4
 
3
5
 
@@ -5,7 +7,7 @@
5
7
  print(a.sum())
6
8
  ```
7
9
 
8
- のsum()は
10
+ のsum()は関数を作る関数で定義されてる様子。
9
11
 
10
12
  ```Python3
11
13
  # pandas/core/generic.py