pandasとは
DataFrame
と呼ばれる表形式のデータを取り扱うライブラリです。
読み書き方法
読み取りは.read_*
メソッド、書き込みはto_*
メソッドを使います。
*には、csv、json、xml、html、excelなどが使えます。データベースとの連携はsqlです。
titanic = pd.read_csv("data/titanic.csv")
抽出方法
データの抽出は、[ ]で行います。
ages = titanic["Age"]
ブールインデックスという方法もあります。
above_35 = titanic[titanic["Age"] > 35]
loc、ilocメソッドを使った方法もあります。
adult_names = titanic.loc[titanic["Age"] > 35, "Name"] titanic.iloc[9:25, 2:5]
列の追加
演算式を用いて列を作成して追加できます。
air_quality["london_mg_per_cubic"] = air_quality["station_london"] * 1.882 air_quality["ratio_paris_antwerp"] = ( air_quality["station_paris"] / air_quality["station_antwerp"]
集計関数
基本的な統計量(平均値、中央値、最小値、最大値、カウント数...)が計算できます。
titanic["Age"].mean() titanic[["Age", "Fare"]].median() titanic[["Age", "Fare"]].describe() titanic.agg( { "Age": ["min", "max", "median", "skew"], "Fare": ["min", "max", "median", "mean"], } )
groupbyを用いて層別集計できます。
titanic[["Sex", "Age"]].groupby("Sex").mean()
indexの変更
df.index df.reset_index inplace,drop引数
columnsの変更
df.set_columns df. columns
結合
concat
メソッドで縦横に結合できます。axis=0で縦、axis=1で横結合です。
air_quality = pd.concat([air_quality_pm25, air_quality_no2], axis=0)
merge
メソッドで列をキーとして結合できます。
air_quality = pd.merge(air_quality, stations_coord, how="left", on="location")
再成形
pivot
、melt
メソッドが使えます。
no2_subset.pivot(columns="location", values="value") air_quality.pivot_table( values="value", index="location", columns="parameter", aggfunc="mean" )
no_2 = no2_pivoted.melt(id_vars="date.utc") no_2 = no2_pivoted.melt( id_vars="date.utc", value_vars=["BETR801", "FR04014", "London Westminster"], value_name="NO_2", var_name="id_location", )
map ラムダ式
df.map.ラムダ式の記法が使えます。
グラフ描画
matplotlib
ライブラリを用いてグラフ化できます。
import matplotlib.pyplot as plt air_quality = pd.read_csv("data/air_quality_no2.csv", index_col=0, parse_dates=True) air_quality.plot() plt.show()
時系列処理
時間はdatetime
型で取り扱いができます。
air_quality["datetime"] = pd.to_datetime(air_quality["datetime"]) pd.read_csv("../data/air_quality_no2_long.csv", parse_dates=["datetime"])
文字列処理
文字型はstr
型と同じ取り扱いができます。
titanic["Name"].str.lower() titanic["Name"].str.split(",") titanic["Surname"] = titanic["Name"].str.split(",").str.get(0) titanic["Name"].str.contains("Countess") titanic[titanic["Name"].str.contains("Countess")] titanic["Name"].str.len() titanic["Name"].str.len().idxmax() titanic.loc[titanic["Name"].str.len().idxmax(), "Name"] titanic["Sex_short"] = titanic["Sex"].replace({"male": "M", "female": "F"})