Pandas入門
Pythonでデータ分析で利用されるPandasについて基本中の基本をまとめてみました。
目次
準備
pandasをインポートします。
またグラフを描くためmatplotlibもインポートします。
import matplotlib as mpl
import matplotlib.pyplot as plt
データフレーム
Pandasはデータフレームというものを使います。
2次元リスト(配列)を与えるだけです。
結果
0 1 2 3
1 4 5 6
見出しとインデックスを与えることもできます。
columns=["a","b","c"],
index=["x","y"])
結果
x 1 2 3
y 4 5 6
読み込み
CSVを読み込みます。
左端の列(0列目)が「2021/1/15」という文字列なので日付型に変換します。
df = pd.read_csv(filename, sep=",", parse_dates=[0])
カンマ付きTSVの場合はsepとthousandsを指定します。
見出し
元の見出しは「日付,都道府県名,各地の感染者数_1日ごとの発表数,各地の死者数_1日ごとの発表数」で長いので、短い見出しに変えます。
ヘッダがないCSVの場合は見出しをつけることができます。
見出し(列)を絞ることができます。
見出し(列)を削除できます。
見出しはあるものの一部だけ見出しがない場合は次のようにします。これは左端の見出しがない場合です。見出しの変更もこれでできます。
出力
print(df)
# 表示する行数を指定できます。先頭部分と末尾部分を合わせて何行かを指定します。
pd.set_option('display.max_rows', 10)
# データフレームの先頭部分だけを出力します。引数に数値を入れると行数を指定できます。末尾はtail()です。
print(df.head())
# データフレームの形を出力します。
print(df.shape)
# データフレームのインデックスの状況を出力します。
print(df.index)
# データフレームの見出しを出力します。
print(df.columns)
# データフレームの見出しの詳細を出力します。
print(df.dtypes)
ソート
ソートします。デフォルトは昇順で、ascending=Falseとすると降順になります。
抽出
条件に合うものを抽出します。
df=df[df["カラム"].str.contains("キーワード")]
# 「~」を使うとキーワードを含まない行を抽出します。
df=df[~df["カラム"].str.contains("キーワード")]
# 漢字を含む行を抽出します。正規表現が使えます。
df=df[df["カラム"].str.contains("[一-龠]")]
# 特定のカラムに欠損値を含む行を抽出します。
df=df[df["カラム"].isnull()]
# 特定のカラムに欠損値を含まない行を抽出します。
df=df[df["代表作"].notnull()]
# 欠損値を含む行を削除します。
df=df.dropna()
インデックスを指定して行を削除します。
集計
日付毎に集計します。見出しを指定しないと計算できるものは全て集計します。
全国の死者数を日付毎に集計します。見出しを指定します。
print(result)
7日移動平均を出力します。
print(result_mean)
CSV出力
CSVで出力します。
グラフ
Pandasでは簡単なグラフを複雑な設定なしで描画できます。
plt.show()
棒グラフと散布図と円グラフ
import matplotlib.pyplot as plt
import japanize_matplotlib
df = pd.DataFrame([[377, 438], [275, 225], [233, 327], [197, 1121], [162, 343]],
index = ["横浜", "大阪", "名古屋", "札幌", "福岡"],
columns = ["人口", "面積"])
# 棒グラフ
df.plot.bar()
plt.show()
# 散布図
df.plot.scatter(x="人口", y="面積")
plt.xlabel("人口")
plt.ylabel("面積")
plt.show()
# 円グラフ
df["人口"].plot.pie()
plt.show()
JSON
JSONファイルを読み込むことができます。
df=pd.read_json(fn_json)
ファイル名をpandas.pyにするとエラーになります。
その他
見出しを絞ることができます。角括弧は二重にします。
HTMLのテーブルに出力することができます。
filename = "test.csv"
df = pd.read_csv(filename, sep=",")
print(df)
df.to_html("table.htm", index = False)
転置できます。
列を追加できます。下の例は平均を求め偏差の列を追加しています。
df = pd.DataFrame([377, 275, 233, 197, 162],
index = ["横浜", "大阪", "名古屋", "札幌", "福岡"],
columns = ["人口"])
mean = df["人口"].mean()
print("平均", mean)
df["偏差"] = df["人口"] - mean
print(df)
結果
人口 偏差
横浜 377 128.2
大阪 275 26.2
名古屋 233 -15.8
札幌 197 -51.8
福岡 162 -86.8
列を追加するケースの別のサンプルです。
単純に値を二倍にした列を追加します。
[["apple", 10], ["banana", 15], ["carrot", 5]],
columns = ["name", "value"])
df["double"] = df["value"] * 2
print(df)
結果
0 apple 10 20
1 banana 15 30
2 carrot 5 10
flagという列を追加し、値がbananaの場合はyellow、それ以外はotherとします。
iterrowsを使いループで処理します。単純に追加できない場合はこの方法で行います。
[["apple", 10], ["banana", 15], ["carrot", 5]],
columns = ["name", "value"])
for index, row in df.iterrows():
df.at[index, "flag"] = "yellow" if row["name"] == "banana" else "other"
print(df)
結果
0 apple 10 other
1 banana 15 yellow
2 carrot 5 other
[ 2021年2月8日 | カテゴリー: Python, デジタル | タグ: Pandas , 入門 ]
« ハイパーリンクがあるセルに網かけをするマクロ | クイキシオをウェブ上で再現 »
コメントを残す