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",
)
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"})