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