Python pandas 使えるようになってきたので覚え書き
こんにちは、Mikenerianです。
最近ようやくデータサイエンティストっぽい環境が整いつつあるので、覚えた技術についてまとめます。
というわけで第一弾は、Pythonにおけるデータ分析必須のライブラリ「pandas」についてです。
ちなみに第何弾まであるのかは決めておらず、そもそも第二弾をやるのかも不明です(汗)
どうでもいいですけどPython系って動物の名前多いですよね。Pythonはニシキヘビ、pandasはパンダ、anacondaはアナコンダ。かわいい。
ちなみにpandasを使う環境はjupyter notebookを強く推奨します。
jupyterは必ずどこかで触れたいと思いますが、jupyterを使えばいくつものデータをまとめて可視化、分析することができちゃいます。
ちなみに私のやり方は、研究などで実験データを上手く処理したい状況を想定しています。
方法別にまとめたので、必要なところ以外は読み飛ばすことをおすすめします。
ライブラリのインポート、使用するデータについて
今回はpandasメインですが、numpyとの相互変換についてもメモっておきます。
import pandas as pd import numpy as np
今回使用するデータは、以下のようなものです。
このような調子で50人分のデータを、擬似乱数を用いて生成しました。
「条件」は1~3までがあり、前後は「0が前、1が後」という設定です。
データの読み込み
csv形式の場合、日本語が文字化けしてしまうという問題がありましたが、
なぜかxlsx形式を直接読み込むと解決しました。
ついでに.txt形式も試してみましたが、今度は区切りを認識してくれないという問題が発生します。
data = pd.read_csv('test_data.csv') # または data = pd.read_xlsx('test_data.xlsx')
Jupyter notebookでは、以下のように表示されます。
read_csvの引数
- names = ('a', 'b'...)を設定すれば、列名(index)を指定できます。
- ヘッダの無いデータの場合は、引数としてheader = Noneを設定します。
- index列を変更するときは、index_col=n(nは任意の整数)として設定します。
データの除外
例えばNo.2のデータがミスだった場合、そこを丸ごと消したいという場合があります。
data = data.drop(1) # データの行は0から始まることに注意
この処理後、データの行名から消した行が消える(番号が飛び飛びになる)ことに注意です。
データの抽出
# 「No.」と「条件」の列を抽出 a = data[['No.', '条件']]
ちなみにdata['No.', '条件']でも良いかと思われますが、そうするとデータ型が異なってしまい、次回以降同じ処理ができなくなるので注意が必要です。
もしデータ型が違ってしまった場合は、data.to_frame()により変換すれば戻ります。
# 「条件」が1であるデータの「No.」と「条件」の列を抽出 a2 = data.loc[:,['No.', '条件']] #または a2 = data[data['条件']==1][['No.', '条件']]
data.locは列名または行名を指定できるオプションです。
data.ilocを用いれば、列番号または行番号を指定できます。
# 0から10個の行を抽出 b = data[0:10]
データの追加
# 「結果4」という列を追加。値はスカラでも他のpandasでも。 data['結果4'] = 1 # 行の結合 data2 = pd.concat([data, data])
データ型の変換(pandas↔array)
# arrayへの変換 arr = np.array(data) # pandasへの変換(列名などは再度指定する必要があることに注意) pand = pd.DataFrame(arr)