LoginSignup
7
6

More than 3 years have passed since last update.

製薬企業研究者がPandasについてまとめてみた

Last updated at Posted at 2019-12-22

はじめに

Pandasは、表形式のデータを簡単に扱えるライブラリです。
ここでは、Pandasに関して最低限知っておきたいポイントに絞って解説します。
Python3系の使用を想定しています。

ライブラリの読み込み

importを使ってライブラリを読み込むことができます。
慣習的に、pdと省略して呼び出せるようにすることが多いです。

Pandas_1.py
import pandas as pd

Series

Seriesは辞書型のリストのようなデータです。

Seriesの作成

Pandas_2.py
import pandas as pd


series_olympic = pd.Series({'東京': 2020, 'リオデジャネイロ': 2016, 'ロンドン': 2012})
print(series_olympic)

Seriesの参照

Pandas_3.py
import pandas as pd


series_olympic = pd.Series({'東京': 2020, 'リオデジャネイロ': 2016, 'ロンドン': 2012})

print(series_olympic[0:2])
print(series_olympic.index) # インデックスのみを取り出す。
print(series_olympic.values) # 値のみを取り出す。

print(series_olympic[series_olympic % 8 == 0]) # 条件を満たす要素のみを取り出す。

要素の追加・削除

Pandas_4.py
import pandas as pd


series_olympic = pd.Series({'東京': 2020, 'リオデジャネイロ': 2016, 'ロンドン': 2012})

series_olympic = series_olympic.append(pd.Series({'北京': 2008})) # 新たな要素を追加する。
print(series_olympic)

series_olympic = series_olympic.drop('東京') # 要素を削除する。
print(series_olympic)

Seriesのソート

Pandas_5.py
import pandas as pd


series_olympic = pd.Series({'東京': 2020, 'リオデジャネイロ': 2016, 'ロンドン': 2012})

print(series_olympic.sort_index()) # インデックスの昇順にソートする。
print(series_olympic.sort_values()) # 値の昇順にソートする。
print(series_olympic.sort_values(ascending=False)) # 値の降順にソートする。

DataFrame

DataFrameは、Seriesを結合した表形式のデータです。

DataFrameの作成

Pandas_6.py
import pandas as pd


series_name = pd.Series(['Ichiro', 'Jiro', 'Saburo'])
series_height = pd.Series([200, 173, 141])
series_weight = pd.Series([100, 72, 40])

df_humans = pd.DataFrame({'name': series_name, 'height': series_height, 'weight': series_weight})
print(df_humans)

df_humans.index = ['一郎', '二郎', '三郎'] # 行名をつける。
df_humans.columns = ['名前', '身長', '体重'] # 列名をつける。
print(df_humans)

df_humans_empty = pd.DataFrame(columns=['名前', '身長', '体重']) # 指定した列名の空のDataFrameを作成する。
print(df_humans_empty)

DataFrameの参照

Pandas_7.py
import pandas as pd


series_name = pd.Series(['Ichiro', 'Jiro', 'Saburo', 'Siro'])
series_height = pd.Series([200, 173, 141, 172])
series_weight = pd.Series([100, 72, 40, 72])
series_gender = pd.Series(['男', '男', '女', '男'])
series_bmi = pd.Series([25, 24, 20, 24.9])
df_humans = pd.DataFrame({'name': series_name, 'height': series_height, 'weight': series_weight}, 'gender': series_gender, 'bmi': series_bmi)
df_humans.index = ['一郎', '二郎', '三郎', '四郎']
df_humans.columns = ['名前', '身長', '体重', '性別', 'BMI']

print(df_humans['名前']) # 「名前」の列を取り出す。
print(df_humans.名前) # これでも「名前」の列を取り出せる。

print(df_humans.loc['一郎', '体重']) # 行名、列名を指定して抽出する。
print(df_humans.loc[['一郎', '二郎'], ['身長', '体重', 'BMI']]) # 複数行、複数列を指定することもできる。
print(df_humans.loc['二郎']) # 指定した行全体を抽出する。
print(df_humans.loc[:, 'BMI']) # 指定した列全体を抽出する。

print(df_humans.iloc[0, 2]) # 行のインデックス番号、列のインデックス番号を指定して抽出する。
print(df_humans.iloc[[0, 1], [1, 2, 4]]) # 複数行、複数列を指定することもできる。
print(df_humans.iloc[1]) # 指定した行全体を抽出する。
print(df_humans.iloc[:, 4]) # 指定した列全体を抽出する。

print(df_humans[df_humans['BMI'] >= 25]) # 条件を満たす行のみを抽出する。
print(df_humans[(df_humans['身長'] >= 170) & (df_humans['体重'] >= 70)]) # 複数条件 (and) でも可能。
print(df_humans[(df_humans['体重'] < 70) | (df_humans['BMI'] < 25)]) # 複数条件 (or) でも可能。
print(df_humans[df_humans['BMI'] < 25]['名前']) #条件を満たす行をフィルターして列を指定することも可能。

DataFrameのソート

Pandas_8.py
import pandas as pd


series_name = pd.Series(['Ichiro', 'Jiro', 'Saburo', 'Siro'])
series_height = pd.Series([200, 173, 141, 172])
series_weight = pd.Series([100, 72, 40, 72])
series_gender = pd.Series(['男', '男', '女', '男'])
series_bmi = pd.Series([25, 24, 20, 24.9])
df_humans = pd.DataFrame({'name': series_name, 'height': series_height, 'weight': series_weight}, 'gender': series_gender, 'bmi': series_bmi)
df_humans.index = ['一郎', '二郎', '三郎', '四郎']
df_humans.columns = ['名前', '身長', '体重', '性別', 'BMI']

df_humans = df_humans.sort_values(by='体重') # 体重で昇順にソートする。
print(df_humans)
df_humans = df_humans.sort_values(by='体重', ascending=False) # 体重で降順にソートする。
print(df_humans)
df_humans = df_humans.sort_values(by=['体重', 'BMI']) # 体重、BMIで昇順にソートする。
print(df_humans)

行または列の追加・削除

Pandas_9.py
import pandas as pd


series_name = pd.Series(['Ichiro', 'Jiro', 'Saburo'])
series_height = pd.Series([200, 173, 141])
series_weight = pd.Series([100, 72, 40])

df_humans = pd.DataFrame({'name': series_name, 'height': series_height, 'weight': series_weight})
df_humans.index = ['一郎', '二郎', '三郎']
df_humans.columns = ['名前', '身長', '体重']

df_humans['性別'] = ['男', '男', '女'] # 列を追加する。
df_humans['BMI'] = df_humans['体重'] / ((df_humans['身長']  / 100)** 2) # 列同士で計算した結果を追加することも可能。
print(df_humans)

df_humans.loc['四郎'] = ['Siro', 170, 72, '男', 24.9] # 行を追加する。
print(df_humans)

df_humans_2 = df_humans.drop('三郎') # 行を削除する。
print(df_humans_2)
df_humans_3 = df_humans.drop('性別', axis=1) # 列を削除する。
print(df_humans_3)

外部ファイルの読み込み・書き出し

Pandas_10.py
import pandas as pd


df_csv = pd.read_csv('filepath/filename.csv') # CSVファイルを読み込む。
df_text = pd.read_csv('filepath/filename.txt', sep='¥t') # タブ区切りテキストファイルを読み込む。
df_excel = pd.read_excel('filepath/filename.xlsx') # エクセルファイルを読み込む。

df_csv_2 = pd.read_csv('filepath/filename_2.csv', header=1) # 1行目が空白になっていたりして、2行目を列名にしたい場合。
df_csv_3 = pd.read_csv('filepath/filename_3.csv', header=None) # 列名がない場合。

df_excel_sheet2 = pd.read_excel('filepath/filename.xlsx', sheet_name=1) # シートのインデックス番号(0始まり)を指定する。
df_excel_sheet2 = pd.read_excel('filepath/filename.xlsx', sheet_name='sheet2') # シート名を指定する。


df_csv.to_csv('filepath/filename.csv') # CSVファイルを書き出す。
df_text.to_csv('filepath/filename.txt', sep='¥t') # タブ区切りテキストファイルを書き出す。
df_excel.to_excel('filepath/filename.xlsx') # エクセルファイルを書き出す。

df_csv.to_csv('filepath/filename.csv', index=False) # 一番左の列に入るインデックス番号が不要な場合。

まとめ

ここでは、Pandasの基本について紹介しました。
これらが全部できるようになると、外部ファイルを読み込んで、処理をして、ファイルを書き出すということができるようになります。

参考資料・リンク

プログラミング言語Pythonとは?AIや機械学習に使える?

7
6
0

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
7
6