pandasでExcel初級者程度のデータ操作ができるようになる

Colab

たくさんの機能があるpandasですが、Excel初級者程度のデータ操作ができるようになることを目指して厳選した内容です。コードをColaboratoryにコピペすればそのまま実行できます。

pandasとは

NumPypandasは、ともにExcelのような多次元配列計算を行うライブラリですが、NumPyは数値に特化して計算速度が速いのに対し、pandasは文字列や時系列データを扱うことができ、統計処理も得意です。Pythonによる機械学習の流れの中では、pandasでデータの前処理を行い、NumPyのndarrayデータに変換してから解析に使われることが多いのです。

pandasのインポート

import pandas as pd

pandasのUser Guide冒頭では、NumPyもインポートするよう書かれていますが、本稿ではあくまでもpandasでできることに特化して説明しています。

ファイルの読み書き

以下の例のデータはColaboratoryに元々置いてあったsample_dataフォルダ内のものを使っています。自分のデータを使うときはファイルツールでアップロードしてください。

df = pd.read_csv('sample_data/california_housing_train.csv')         # CSVの読み込み
df.to_csv('california_housing_copy.csv')                             # CSVに書き出し
df.to_excel('california_housing_copy.xlsx', sheet_name='pandas')     # Excelに書き出し
df1 = pd.read_excel('california_housing_copy.xlsx', sheet_name='pandas') # Excelの読み込み

ファイルの読み書きでは特に出力はありません。エラーが出なければOKです。

そうたくん
そうたくん

pandasはpdという名前でimportするのが慣習だよ。ファイルを読み込む変数名のdfは、pandasのデータ形式であるDataFrameの頭文字から来ているんだ。Excel書き出し時にシート名を省略するとSheet1になり、Excel読み込み時にシート名を省略すると最初のシートが読まれるんだ。

なお、サンプルデータの説明は以下のコマンドで確認できます。

!cat sample_data/README.md

データの確認

df.shape                      # 配列サイズ確認
df.columns                    # カラム名確認
df.info()                     # カラム名・データ型や配列サイズ確認
df.head()                     # 先頭5行確認。整数を指定するとその行数を確認。
df.tail()                     # 末尾5行確認。整数を指定するとその行数を確認。
df.describe()                 # 列ごとのデータ数、平均、標準偏差、最大、最小など
df.mean()                     # 列ごとの平均。median, sum, count, std, min, maxなども可能
df.mean(1)                    # 行ごとの平均。median, sum, count, std, min, maxなども可能
データの確認 実行例(shape, columns, info, mean)
データの確認 実行例(shape, columns, info(), mean())
データの確認 実行例(head, describe)
データの確認 実行例(head, describe)

行・列の一部を取り出し

以下の操作はdfを変更せず、新たなDataFrameを返します。dfに代入すると、dfを書き換えることができます。

df['longitude']                           # 1列取り出し
df[['longitude', 'latitude']]             # 複数列取り出し
df[2:5]                                   # 2~4行取り出し
df[['longitude','latitude']][1:9]         # 2カラム×1~8行取り出し
df[df['median_income'] > 10.0]            # 条件に合致する行取り出し
行・列の一部を取り出し 実行例
行・列の一部を取り出し 実行例

行・列の一部を削除

以下の操作はdfを変更せず、新たなDataFrameを返します。実際に削除するには、dfに代入する必要があります。

df.drop(['housing_median_age', 'total_rooms'], axis = 1)   # 列を削除 axis = 1は列
df.drop([0,1,3])                                           # 行を削除 axis = 0は省略可
df[::10]                                                   # 10行間隔で間引く
行列の一部を削除 実行例
行列の一部を削除 実行例

行・列の一部を取り出し」たものをdfに代入することで、実質的にdfの取り出されなかった部分を削除することもできます。

並べ替え

以下の操作はdfを変更せず、新たなDataFrameを返します。df自体を並べ替えるには、dfに代入する必要があります。

df.sort_values('median_income')                        # 行を並べ替え
df.sort_values('median_income', ascending = False)     # 行を逆順で並べ替え
df.sort_values(['median_income','households'], ascending = [True, False]) # 複数指標で並べ替え
二つの列で並べ替え 実行例
二つの列で並べ替え 実行例

計算して新たな列に代入

以下の操作は、dfを変更します

df['pop_per_bedroom'] = df['population'] / df['total_bedrooms']          # 末尾に追加
df.insert(2,'pop_per_bedroom2', df['population'] / df['total_bedrooms']) # 2列目の後に挿入
df.insert(0,'id',pd.RangeIndex(start=1, stop=len(df.index)+1, step=1)) #連番idを先頭に追加
計算して新たな列に代入 実行例

三角関数や指数・対数を計算するにはNumPyライブラリもインポートする必要があります。

import numpy as np
df['log_median_house_value'] = np.log(df['median_house_value'])

グラフ

グラフ作成は、pandas内部でmatplotlibを呼び出しています。

df['pop_per_bedroom'].hist(range=[0,10], bins=50)# histgram. range:階級範囲、bins:階級数
df.hist()                                        # 全変数のhistgram
df.plot.scatter('population', 'total_bedrooms')  # 散布図
df.plot()                                        # 全変数の折れ線グラフ
グラフ作成 実行例
グラフ作成 実行例

pandasのDataFrameをNumPyのndarrayに変換する

nd = df.values            # DataFrameをndarrayに変換
dfarrayに変換 実行例
ndarrayに変換 実行例
かなえさん
かなえさん

pandasはたくさんの機能があるけど、全部覚えるのは大変かも。基本機能を組み合わせればたいがいの目的を達成できるわ。頭をやわらかくして工夫してね。

もっと勉強したい人は公式マニュアルを見てね。 Have fun!

コメント

タイトルとURLをコピーしました