回答編集履歴
2
表現を修正
test
CHANGED
@@ -16,19 +16,19 @@
|
|
16
16
|
|
17
17
|
提示されたコードのようにExcelの文書ファイルを読み込むと、データフレーム`df`の行インデックスは0から始まる連番が自動的に付きます。
|
18
18
|
|
19
|
-
`month`列の値を使ってデータフレームの一部を切り出したものをデータフレーム`df`に再代入しても、データフレームの行インデックスは元の連番を受け継ぎます。
|
19
|
+
`month`列の値を使ってデータフレームの一部を切り出したものをデータフレーム`df`に再代入しても、データフレームの行インデックスは元の連番を受け継ぎます。Excelの文書ファイルの内容が未公開なので推測にすぎませんが、おそらく**最初の行インデックスが3より大きな値になっている**と思われます。
|
20
20
|
|
21
21
|
|
22
22
|
|
23
|
-
いっぽう、提示されたコードのようにリスト`price_list`からシリーズ`s`を生成すると、シリーズの各要素には0から始まる連番のインデックスが付きます。
|
23
|
+
いっぽう、提示されたコードのようにリスト`price_list`からシリーズ`s`を生成すると、シリーズの各要素には0から始まる連番のインデックスが付きます。提示されたコードでは、リストが4つの要素を持つので、シリーズのインデックスは0, 1, 2, 3となります。
|
24
24
|
|
25
25
|
|
26
26
|
|
27
|
-
これを`insert`で`df`に挿入するとき、`df`の行インデックスに`s`のインデックスと一致するものがない
|
27
|
+
これを`insert`で`df`に挿入するとき、`df`の行インデックス(3より大きい値)に`s`のインデックス(0~3)と一致するものがないので、挿入される値がすべてNaNになる、というわけです。もし、`df`の行インデックスのひとつだけ3以下であれば、シリーズの値がひとつだけ格納され、残りはNaNになります。
|
28
28
|
|
29
29
|
|
30
30
|
|
31
|
-
|
31
|
+
先頭行から順番にシリーズ`s`の内容を挿入したいのであれば、(質問者もやっていましたが)データフレーム`df`の行インデックスを(0からの連番に)振り直せばいいでしょう。実は、この操作は1行でできるので、以下のようにしてください。
|
32
32
|
|
33
33
|
|
34
34
|
|
@@ -40,4 +40,4 @@
|
|
40
40
|
|
41
41
|
|
42
42
|
|
43
|
-
`drop=True`で行インデックスの値を列として
|
43
|
+
`drop=True`で元の行インデックスの値を列として残さないこと、`inplace=True`で`df`そのものを書き換えること(`df = df.reset_index(...)`と書かなくていいこと)を指示しています。
|
1
補足を追加
test
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
|
11
11
|
- 行インデックスと一致するシリーズのインデックスが見つからなければ、データフレームにはNaNが挿入されます。
|
12
12
|
|
13
|
-
- シリーズの中に行インデックスに一致しないインデックスがあっても、そ
|
13
|
+
- シリーズの中に行インデックスに一致しないインデックスがあっても、そのインデックスを持つ値は単に無視されます(np.arrayを指定するときのようにエラーにはなりません)。
|
14
14
|
|
15
15
|
|
16
16
|
|