[解決済み] pandasで別の値に基づいてある値を変更する
2022-04-27 16:36:38
質問
StataのコードをPythonで再現しようとしていて、Pandasの方向性を指摘されました。 しかし、どのようにデータを処理するかについて、頭を悩ませています。
IDが特定の数字に一致する場合、対応する2つの値FirstNameとLastNameを変更したいとします。
Stataでは次のようになります。
replace FirstName = "Matt" if ID==103
replace LastName = "Jones" if ID==103
つまり、これはFirstNameのうち、ID==103の値に対応するすべての値をMattに置き換えます。
Pandasでは、次のようなことを試しています。
df = read_csv("test.csv")
for i in df['ID']:
if i ==103:
...
ここから先がよくわからない。 何かアイデアはありますか?
どのように解決するのですか?
Pythonのスライスとインデックスの機能を使って、条件が成立する場所を論理的に評価し、そこにデータを上書きするのも一つの方法です。
に直接データを読み込むことができると仮定すると、そのデータは
pandas
と
pandas.read_csv
という場合は、以下のコードが参考になると思います。
import pandas
df = pandas.read_csv("test.csv")
df.loc[df.ID == 103, 'FirstName'] = "Matt"
df.loc[df.ID == 103, 'LastName'] = "Jones"
コメントにあるように、一発で両方の列への割り当てを行うこともできます。
df.loc[df.ID == 103, ['FirstName', 'LastName']] = 'Matt', 'Jones'
なお、このとき
pandas
を使用するには、バージョン 0.11 以降を使用します。
loc
を上書き代入操作のために使用します。
もう一つの方法として、連鎖式代入と呼ばれるものを使用する方法もあります。これは動作が安定しないので、最適な解決策とは考えられていません(それは 明示的に推奨されない のドキュメントに記載されています)が、知っておくと便利です。
import pandas
df = pandas.read_csv("test.csv")
df['FirstName'][df.ID == 103] = "Matt"
df['LastName'][df.ID == 103] = "Jones"
関連
-
[解決済み] 複数の例外を1行でキャッチする(ブロックを除く)
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] Pandasのカラム名のリネーム
-
[解決済み] Pandas DataFrameからカラムを削除する
-
[解決済み] Pandasのデータフレームで複数の列を選択する
-
[解決済み] 一行ずつ追加してPandas Dataframeを作成する
-
[解決済み] PandasでDataFrameの行を列の値に基づいて削除する
-
[解決済み】pandasでカラムの種類を変更する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
ピローによる動的キャプチャ認識のためのPythonサンプルコード
-
Python カメの描画コマンドとその例
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
[解決済み】TypeErrorの修正方法。Unicodeオブジェクトは、ハッシュ化する前にエンコードする必要がある?
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】 NameError: グローバル名 'xrange' は Python 3 で定義されていません。
-
[解決済み】Django: ImproperlyConfigured: SECRET_KEY 設定は空であってはならない
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。
-
[解決済み】Flaskのテンプレートが見つからない【重複あり