ゆとり世代の自由研究

勉強が一生終わりません

Pythonのpandasライブラリ

pandasとは

 DataFrameと呼ばれる表形式のデータを取り扱うライブラリです。

読み書き方法

 読み取りは.read_*メソッド、書き込みはto_*メソッドを使います。
 *には、csvjsonxml、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")

再成形

 pivotmeltメソッドが使えます。

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