In [1]: import pandas as pd
- 大気質データ
In [2]: air_quality = pd.read_csv("data/air_quality_no2.csv", index_col=0, parse_dates=True) In [3]: air_quality.head() Out[3]: station_antwerp station_paris station_london datetime 2019-05-07 02:00:00 NaN NaN 23.0 2019-05-07 03:00:00 50.5 25.0 19.0 2019-05-07 04:00:00 45.0 27.7 19.0 2019-05-07 05:00:00 NaN 50.4 16.0 2019-05-07 06:00:00 NaN 61.9 NaN
既存の列から派生した新しい列を作成する方法#
ロンドンのステーションの\(NO_2\)濃度をmg/m\(^3\)で表したい。
(摂氏25度、1013hPaの圧力を仮定すると、換算係数は1.882です)
In [4]: air_quality["london_mg_per_cubic"] = air_quality["station_london"] * 1.882 In [5]: air_quality.head() Out[5]: station_antwerp ... london_mg_per_cubic datetime ... 2019-05-07 02:00:00 NaN ... 43.286 2019-05-07 03:00:00 50.5 ... 35.758 2019-05-07 04:00:00 45.0 ... 35.758 2019-05-07 05:00:00 NaN ... 30.112 2019-05-07 06:00:00 NaN ... NaN [5 rows x 4 columns]
新しい列を作成するには、代入の左側に新しい列名をつけて
[]
ブラケットを使用します。
注記
値の計算は**要素ごと**に行われます。つまり、指定された列内のすべての値に一度に1.882が掛けられます。行を反復処理するためのループを使用する必要はありません!
パリとアントワープの値の比率を確認し、その結果を新しい列に保存したい。
In [6]: air_quality["ratio_paris_antwerp"] = ( ...: air_quality["station_paris"] / air_quality["station_antwerp"] ...: ) ...: In [7]: air_quality.head() Out[7]: station_antwerp ... ratio_paris_antwerp datetime ... 2019-05-07 02:00:00 NaN ... NaN 2019-05-07 03:00:00 50.5 ... 0.495050 2019-05-07 04:00:00 45.0 ... 0.615556 2019-05-07 05:00:00 NaN ... NaN 2019-05-07 06:00:00 NaN ... NaN [5 rows x 5 columns]
計算は再び要素ごとに行われるため、
/
は各行の値に対して適用されます。
その他の算術演算子(+
、-
、*
、/
、…)または論理演算子(<
、>
、==
、…)も要素ごとに機能します。後者は、条件式を使用してテーブルの行をフィルタリングするデータのサブセット化チュートリアルですでに使用されています。
より高度なロジックが必要な場合は、apply()
を使用して任意のPythonコードを使用できます。
OpenAQで使用されている対応するステーション識別子にデータ列の名前を変更したい。
In [8]: air_quality_renamed = air_quality.rename( ...: columns={ ...: "station_antwerp": "BETR801", ...: "station_paris": "FR04014", ...: "station_london": "London Westminster", ...: } ...: ) ...:
In [9]: air_quality_renamed.head() Out[9]: BETR801 FR04014 ... london_mg_per_cubic ratio_paris_antwerp datetime ... 2019-05-07 02:00:00 NaN NaN ... 43.286 NaN 2019-05-07 03:00:00 50.5 25.0 ... 35.758 0.495050 2019-05-07 04:00:00 45.0 27.7 ... 35.758 0.615556 2019-05-07 05:00:00 NaN 50.4 ... 30.112 NaN 2019-05-07 06:00:00 NaN 61.9 ... NaN NaN [5 rows x 5 columns]
rename()
関数は、行ラベルと列ラベルの両方で使用できます。対応する名前を更新するには、キーが現在の名前で値が新しい名前である辞書を提供します。
マッピングは固定名に限定される必要はなく、マッピング関数にすることもできます。たとえば、列名を小文字に変換することも関数を使用して実行できます。
In [10]: air_quality_renamed = air_quality_renamed.rename(columns=str.lower)
In [11]: air_quality_renamed.head()
Out[11]:
betr801 fr04014 ... london_mg_per_cubic ratio_paris_antwerp
datetime ...
2019-05-07 02:00:00 NaN NaN ... 43.286 NaN
2019-05-07 03:00:00 50.5 25.0 ... 35.758 0.495050
2019-05-07 04:00:00 45.0 27.7 ... 35.758 0.615556
2019-05-07 05:00:00 NaN 50.4 ... 30.112 NaN
2019-05-07 06:00:00 NaN 61.9 ... NaN NaN
[5 rows x 5 columns]
列または行ラベルの名前変更の詳細については、ラベルの名前変更に関するユーザーガイドのセクションを参照してください。
覚えておくこと
[]
の間に新しい列名を付けてDataFrameに結果を代入することで、新しい列を作成します。操作は要素ごとに行われ、行をループする必要はありません。
辞書または関数を使用して
rename
を使用して、行ラベルまたは列名を変更します。
ユーザーガイドには、列の追加と削除に関する別のセクションが含まれています。