[解決済み] Pandas/Pythonでカラムのフィルタリングにlocを使うのと角括弧だけを使うのでは何が違うのでしょうか?
質問
Pandas DataFrameのカラムを選択する方法として、3つの方法があることに気づきました。
最初の方法は、locを使用して列を選択する方法です。
df_new = df.loc[:, 'col1']
第二の方法 - よりシンプルで高速に見えます。
df_new = df['col1']
第3の方法 - 最も便利な方法です。
df_new = df.col1
この3つの方法に違いはあるのでしょうか?私はそうは思いません。それなら、3番目の方法を使う方がいいと思います。
同じことをするのに3つの方法があるように見えるのが不思議です。
どのように解決するのですか?
以下の状況では、同じ動作をします。
-
単一のカラムを選択する (
df['A']
と同じです。df.loc[:, 'A']
-> A列を選択します) -
カラムのリストを選択する (
df[['A', 'B', 'C']]
と同じです。df.loc[:, ['A', 'B', 'C']]
-> 列A,B,Cを選択します) -
行によるスライス (
df[1:3]
と同じです。df.iloc[1:3]
->は、1行目と2行目を選択します。ただし、行をスライスする際にloc
でスライスした場合、代わりにiloc
があると仮定すると、1,2,3 行目が表示されます。 RangeIndex . 詳細を見る ここで .)
しかし
[]
は以下の状況では動作しません。
-
1つの行を選択するのに
df.loc[row_label]
-
行のリストを選択するには
df.loc[[row_label1, row_label2]]
-
列をスライスするには
df.loc[:, 'A':'C']
この3つは
[]
.
さらに重要なことは、もし選択が行と列の両方を含むなら、割り当てが問題になります。
df[1:3]['A'] = 5
これは1行目と2行目を選択し、リターンオブジェクトの列 'A' を選択して値5を代入しています。問題は、リターンオブジェクトがコピーである可能性があるため、実際のDataFrameが変更されない可能性があることです。このため SettingWithCopyWarningが発生します。 . この割り当てを行う正しい方法は
df.loc[1:3, 'A'] = 5
とは
.loc
を使えば、元のDataFrameを変更することが保証されます。また、カラムをスライスすることも可能です (
df.loc[:, 'C':'F']
)、単一の行を選択する (
df.loc[5]
) 、そして行のリストを選択する (
df.loc[[1, 2, 5]]
).
また、この二つは同時にAPIに含まれていないことに注意してください。
.loc
は、より強力で明示的なインデクサとしてずっと後に追加されました。参照
unutbuの回答
をご覧ください。
注意: カラムの取得に
[]
対して
.
は全く別の話題です。
.
は便宜上存在するだけです。これは、名前が有効な Python 識別子であるカラムにのみアクセスできます(つまり、スペースを含むことはできず、数字で構成することもできません...)。Series/DataFrame のメソッドと名前が衝突する場合は使用できません。また、存在しないカラムにも使用できません(例えば、代入された
df.a = 1
という代入は、列が存在しない場合は機能しません。
a
). その他に
.
と
[]
は同じです。
関連
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] リストとタプルの違いは何ですか?
-
[解決済み] Pythonの旧スタイルのクラスと新スタイルのクラスの違いは何ですか?
-
[解決済み] pipとcondaの違いは何ですか?
-
[解決済み] PandasのデータフレームをSQLのように'in'と'not in'でフィルタリングする方法
-
[解決済み] Pandasのmap、applymap、applyメソッドの違い
-
[解決済み】__str__と__repr__の違いは何ですか?
-
[解決済み】venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenvなどの違いは何ですか?
-
[解決済み】type()とisinstance()の違いは何ですか?)
-
[解決済み】Djangoでnull=Trueとblank=Trueの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pandasのデータフレームで複数の列を選択する
-
[解決済み】ilocとlocはどう違うのですか?
-
[解決済み] Pythonのマルチプロセッシングプールimap_unorderedの呼び出しの進捗を表示しますか?
-
[解決済み] Pythonのargparseを使った隠し引数の作成
-
[解決済み] DataFrameに日付間の日数カラムを追加する pandas
-
[解決済み] Django 1.7で初期マイグレーションからマイグレートバックする方法は?
-
[解決済み] Pythonでマルチプロセッシングキューを使うには?
-
[解決済み] matplotlib でプロットの軸、目盛、ラベルの色を変更する方法
-
[解決済み] virtualenv の `--no-site-packages` オプションを元に戻す。
-
[解決済み] Pythonでランダムなファイル名を生成する最良の方法