こここブログ

機械学習, 統計分析, 競技プログラミング, CTF, VR, ……テクノロジーへの憧憬に身を焼かれている人のメモ帳です

Pythonのpandasデータフレームの要素の値が変更される場合と変更されない場合+行名ではなく行番号で指定する方法

2019-05-08-公開 2019-05-10-更新

困りごと

  1. Pythonのpandasでデータフレームの値を変更しようとした際、代入できず困った
  2. pandasをソートして一番最初の行を取ってこようとした際、行番号ではなく行名?での指定が行われて困った

解決策

※1.の原因と対策は以下の記事を参照すればもうそれで十分とも言えるが… qiita.com

ここでは1, 2それぞれの困りごとに対する簡単な実験の結果と過程をメモしておく。

実験

実験過程は以下のjupyter notebookに記載しているので、以下では結論を。 github.com

dfの値の変更ルール(困り1)

  • 「列(Series)を抽出->行を指定(スライシング)」で行う必要がある(先述の記事より)
    • 「行指定 -> 列抽出」で処理が行われると値が変更されない
      • ※値の変更先が数値だと後者でも変更できた -> 異なる型のデータの代入時にうまくいかない?
    • pd.DataFrameはpd.Seriesが集まったものだから、最初にSeriesを取り出す必要があるため?
    • 行・列の順番で、とはいえ以下の方法では列の指定でエラーが出る
      • df.loc[col][i] = 210

値の指定方法

行名・列名で指定する場合(困り1)

行の順番・列名で指定する場合(困り1, 2)

  • 列抜き出し後、行の指定に.iloc[i]を使う
    • 例:df[col].iloc[i] = 999
    • それ以外の方法の多くはindexの指定になり、ソート前の行番号を指定してしまう(indexがデフォルトの連番の場合)

参考

感想

  • 「指定の順番」「元の値の型」「使うメソッド」で挙動が変わるとは、つらい
  • 長時間の処理が終わって結果が全部NaNだったときの悲しさ

精進せねば。

Pythonによるデータ分析入門 第2版 ―NumPy、pandasを使ったデータ処理

Pythonによるデータ分析入門 第2版 ―NumPy、pandasを使ったデータ処理

  • 作者: Wes McKinney,瀬戸山雅人,小林儀匡,滝口開資
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2018/07/26
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

関連記事

www.kokokocococo555.com