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を使用します。
ユーザーガイドには、列の追加と削除に関する別のセクションが含まれています。