回答編集履歴

2

表現を修正

2020/10/17 03:15

投稿

Daregada
Daregada

スコア11990

test CHANGED
@@ -16,19 +16,19 @@
16
16
 
17
17
  提示されたコードのようにExcelの文書ファイルを読み込むと、データフレーム`df`の行インデックスは0から始まる連番が自動的に付きます。
18
18
 
19
- `month`列の値を使ってデータフレームの一部を切り出したものをデータフレーム`df`に再代入しても、データフレームの行インデックスは元の連番を受け継ぎます。とき、おそらく最初の行インデックスが3より大きな値になっていると思われます。
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`のインデックスと一致するものがない、挿入され値がすべてNaNになる、というわけです。
27
+ これを`insert`で`df`に挿入するとき、`df`の行インデックス(3より大きい値)に`s`のインデックス(0~3)と一致するものがないので、挿入され値がすべてNaNになる、というわけです。もし、`df`の行インデックスのひとつだけ3以下であれば、シリーズの値がひとつだけ格納され、残りはNaNになります。
28
28
 
29
29
 
30
30
 
31
- 解決策と(質問者もやっていましたが)データフレーム`df`の行インデックスを(0からの連番に)振り直せば、先頭行から順番にシリーズ`s`の内容を挿入することがきます。実はこは1行でできるので、以下のようにしてください。
31
+ 先頭行から順番にシリーズ`s`の内容を挿入たいのであれば、(質問者もやっていましたが)データフレーム`df`の行インデックスを(0からの連番に)振り直せばいいしょう。実はの操作は1行でできるので、以下のようにしてください。
32
32
 
33
33
 
34
34
 
@@ -40,4 +40,4 @@
40
40
 
41
41
 
42
42
 
43
- `drop=True`で行インデックスの値を列として挿入しないこと、`inplace=True`で`df`そのものを書き換えること(`df = df.reset_index(...)`と書かなくていいこと)を指示しています。
43
+ `drop=True`で元の行インデックスの値を列として残さないこと、`inplace=True`で`df`そのものを書き換えること(`df = df.reset_index(...)`と書かなくていいこと)を指示しています。

1

補足を追加

2020/10/17 03:15

投稿

Daregada
Daregada

スコア11990

test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  - 行インデックスと一致するシリーズのインデックスが見つからなければ、データフレームにはNaNが挿入されます。
12
12
 
13
- - シリーズの中に行インデックスに一致しないインデックスがあっても、そは無視されますエラーにはなりません。
13
+ - シリーズの中に行インデックスに一致しないインデックスがあっても、そのインデックスを持つ値単に無視されます(np.arrayを指定するときのようにエラーにはなりません)
14
14
 
15
15
 
16
16