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

回答編集履歴

2

表現を修正

2020/10/17 03:15

投稿

Daregada
Daregada

スコア11990

answer CHANGED
@@ -7,16 +7,16 @@
7
7
  - シリーズの中に行インデックスに一致しないインデックスがあっても、そのインデックスを持つ値は単に無視されます(np.arrayを指定するときのようにエラーにはなりません)。
8
8
 
9
9
  提示されたコードのようにExcelの文書ファイルを読み込むと、データフレーム`df`の行インデックスは0から始まる連番が自動的に付きます。
10
- `month`列の値を使ってデータフレームの一部を切り出したものをデータフレーム`df`に再代入しても、データフレームの行インデックスは元の連番を受け継ぎます。とき、おそらく最初の行インデックスが3より大きな値になっていると思われます。
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`のインデックスと一致するものがない、挿入され値がすべてNaNになる、というわけです。
14
+ これを`insert`で`df`に挿入するとき、`df`の行インデックス(3より大きい値)に`s`のインデックス(0~3)と一致するものがないので、挿入され値がすべてNaNになる、というわけです。もし、`df`の行インデックスのひとつだけ3以下であれば、シリーズの値がひとつだけ格納され、残りはNaNになります。
15
15
 
16
- 解決策と(質問者もやっていましたが)データフレーム`df`の行インデックスを(0からの連番に)振り直せば、先頭行から順番にシリーズ`s`の内容を挿入することがきます。実はこは1行でできるので、以下のようにしてください。
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`で行インデックスの値を列として挿入しないこと、`inplace=True`で`df`そのものを書き換えること(`df = df.reset_index(...)`と書かなくていいこと)を指示しています。
22
+ `drop=True`で元の行インデックスの値を列として残さないこと、`inplace=True`で`df`そのものを書き換えること(`df = df.reset_index(...)`と書かなくていいこと)を指示しています。

1

補足を追加

2020/10/17 03:15

投稿

Daregada
Daregada

スコア11990

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より大きな値になっていると思われます。