私は Stata コードを Python で再現しようとしており、Pandas の使用を勧められました。しかし、データの処理方法がよくわかりません。
列見出し「ID」のすべての値を反復処理するとします。その ID が特定の番号と一致する場合、対応する 2 つの値 FirstName と LastName を変更します。
Stata では次のようになります:
replace FirstName = "Matt" if ID==103
replace LastName = "Jones" if ID==103
したがって、ID == 103 の値に対応する FirstName 内のすべての値が Matt に置き換えられます。
Pandasでは、このようなことを試しています
df = read_csv("test.csv")
for i in df['ID']:
if i ==103:
...
ここからどこへ行けばよいかわかりません。何かアイデアはありますか?
ベストアンサー1
1 つのオプションは、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
実際、0.8のような古いバージョンでは(連鎖代入の批判者が言うかもしれないが)、連鎖代入は正しいそれを実行する方法であるため、パンダの最新バージョンでは回避する必要があるとしても、知っておくと便利です。
もう一つの方法は、連鎖代入と呼ばれるものを使うことです。この動作は安定性に欠けるため、最善の解決策とは考えられません(明確に推奨されないドキュメントには記載されていませんが、以下の点を知っておくと便利です。
import pandas
df = pandas.read_csv("test.csv")
df['FirstName'][df.ID == 103] = "Matt"
df['LastName'][df.ID == 103] = "Jones"