3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

pandasでよく使う処理メモ(初心者)

Last updated at Posted at 2020-05-22

はじめに

この記事はpandasを使ったpythonによるデータ分析のメモ書きです。
初歩的なことを簡潔に記載します。
pandasで読み込んだデータを代入した変数は以下とし、記載します。

  • an_data

pandasとは

 Pythonのデータ解析用ライブラリ

pandasのimport

import例(以降、pdにて利用例を記載)

import pandas as pd

CSVファイル、Excelファイル読み込み

  • CSVファイルの読み込み
an_data = pd.read_csv("<CSVファイル名>")
  • Excelファイルの読み込み
an_data = pd.read_excel("<エクセルファイル名>")

読み込んだデータを5行分表示

 データに含まれる内容を確認したいときに便利

an_data.head()

データ結合

 別々に読み込んだデータを結合する場合の処理について記載。
 一つ目のデータ名:an_data1
 二つ目のデータ名:an_data2

ユニオン

 データを縦に結合します。(ignore_index=Trueにしておくとindexを再度振り直してくれる)

concat_data = pd.concat([an_data1, an_data2], ignore_index=True)

ジョイン

 データを横に結合します。

merge_data = pd.merge(an_data1, an_data2[[<特定のキーを結合する>]], on="<結合キー>", how=left)

日付データの取り扱い方

 文字列認識されたデータを日付データに変更

an_data["date"] = pd.to_datetime(an_data["date"])

 年と月のみを抽出

an_data["年月"] = an_data["date"].dt.strftime("%Y%m")

 エクセルなどのデータで以下表記のようになっているものは、謎数字が読み込まれる。
 謎数字を日付データとして取り扱えるようにする。

  • 謎数字になるような元データ
    • 2020年5月1日
  • 上記データをpd.to_datetime()すると、以下のような数字が出力される(例なので実際の値とは違います)
    • 456789
ch_time = pd.to_timedelta(an_data.loc[flg_num, "date"].astype("float"), unit="D") + pd.to_datetime("1900/01/01")

 一個上の処理をすると、YYYY-MM-DDのようなハイフン区切りになる。
 スラッシュ区切りの日付と混じっていたら面倒なので、書式統一(YYYY-MM-DD)する。

ch_time = pd.to_datetime(an_data.loc[~flg_num, "date"])

データ無しの値を探す

 nullデータが含まれているindexの加算

an_data.isnull().sum()

 nullデータが含まれているかbooleanで出力 (axisが0で縦方向。1で横方向)

an_data.isnull().any(axis=0)

describeによるデータの出力

 データの数、平均、標準偏差、五数要約が出力される

an_data.describe()

データタイプの出力

<読み込みデータ>.dtypes

groupbyによるデータまとめの例

 as_index=Falseオプションをつけると、groupbyで指定の名前で自動作成されるindexを作成しない。

  • 特定の列が持つ同じ値でグループ化し、別の列の数値を加算する
an_data.groupby(["<特定の列>"]).sum()["<別の列>"]

 特定の列と別の列は複数指定することが可能。

an_data.groupby(["<特定の列A>", "<特定の列B>"]).sum()["<別の列A">, "<別の列b>"]
  • 特定の列が持つ同じ値でグループ化し、別の列の値をカウントする。
tmp = an_data.groupby(["<特定の列>"]).count()["<別の列>"]
  • groupbyとaggregation

 aggを使うことで平均などを出力できる

tmp = an_data.groupby("<特定の列>").agg("mean", "median", "max", "min")["<aggregationしたい列>"]

pivot_table

 新しい表を作成する

an_data = pd.pivot_table(an_data, index="<indexにしたい列名>", columns"<olumnにしたい列名>", values=["<表に出力したい列の値>"], aggfunc="", fill_value=0

ソート

ascending=Trueは昇順

an_data.sort_values(by=["<主となるソート対象列>"], ascending=True)

空白削除

an_data["test_val"] = an_data["test_val"].str.replace("  ", "")
an_data["test_val"] = an_data["test_val"].str.replace(" ", "")

uniqueによるデータの確認

print(len(pd.unique(an_data["val"])))
print(pd.unique(an_data["val"]))

値が数値であるパラメータ数の確認

flg_num = an_data["<列名>"].astype("str").str.isdigit()
flg_num.sum()

loc

 ラベル指定

  • ラベルで指定
an_data.loc[:, [<column01>, <column02>]]
  • booleanで指定
an_data.loc[[True, False, True, False], [False, False, True]]

iloc

 番号指定

  • 番号で指定
an_data.iloc[[0:2], [2:4]]
  • booleanで指定
an_data.iloc[[False, True, True], [False, True, False]]

ラベルの名前変更

 inplace=Trueを指定すること、元のデータが変更される

an_data.rename(columns={"<変更前の名前>":"<変更後の名前>"}, index={"<変更前の名前>":"<変更後の名前>"}, inplace=True)

再index化

 index値の再振り直しをするのでindexの被りがなくなる。

an_data = an_data.reset_index(drop=False)

ドロップ処理

an_data = an_data.drop("<ドロップしたい項目>", axis=1)

where

 whereを使って条件に合致”しない”項目の値を変更
 以下例は<比較項目>の値が5以下でない場合に、<対象の項目>の値を1に変更する

an_data["<対象の項目>"] = an_data["<対象の項目>"].where(an_data["<比較項目>"]<5, 1)

relativedelta

delta = relative_delta(dtime1, dtime2)
deltaの中身はdtime1とdtime2の差分(dtime1の方が最新の日付)

欠損値の除去

an_data = an_data.dropna(subsent=["<欠損値が存在する列名>"])

欠損箇所の置き換えは以下 (0で埋める)

an_data = an_data.fillna(0)

確認は以下で可能

an_data.isna().sum()

csv出力

an_data.to_csv("", index=False)

graph出力の例

 graph出力用ライブラリのimport例 (以降、pltにて利用例を記載)
 併せて2行目にjupyter notebookで使う場合の例を記載する。

import matplotlib.pyplot as plt
%matplotlib inline

 プロットするデータの読み込み(横軸、縦軸、オプションの順番で記載)
 最低限labelはつけた方がいい

plt.plot(an_data.index, an_data['<縦軸となる項目>'], label='label-1')
plt.plot(an_data.index, an_data['<縦軸となる項目>'], label='label-2')
plt.plot(an_data.index, an_data['<縦軸となる項目>'], label='label-3')

 読み込んだデータをグラフにプロットする

plt.legend()
3
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?