👏

Python|pandasの基本コマンド

2023/10/02に公開

pandasとは

pandasは、データの集計や加工に使用されるライブラリ。
データの読み込み、表示、整形、書き出し等が可能。

データの読み書き

データの読み込み(ファイルから)

Google Colabで実行
[1] import pandas as pd
[2] import numpy as np
[3] data = pd.read_csv('./data.csv', index_col=False) 

import pandas
pandasを利用できるようにする

as pd
pandas と書く部分を pdと書ける要因設定。本来ならpandas.read_csv...と書くべき部分をpd.read_csv...と書けている。

import numpy as np
numptyは機械学習の計算をより速く効率的に行えるようにする拡張モジュール。

pd.raed_csv('ファイル名')
pd.read_csvはpandasの関数で、CSVファイルを読み込む際に使用する。./はカレントディレクトリ内にあるファイルということを明示的にしている。./は記述していなくても問題ない。

index_col=False
読み込みファイル内にindexカラムがない場合、index_col=Falseを追記する。そうすると、読み込み時に自動的にindexが追加される。indexカラムがある場合、index_col='ID'のように指定することが可能。

データの読み込み(直接記述)

[1] import pandas as pd
[2] import numpty as np
[3] data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'City': ['New York', 'San Francisco', 'Los Angeles']
}
[4] series = pd.Series([1, 2, 3])
[5] df = pd.DataFrame([['airi', 26], ['mana', 19]])

pd.Series()
pandasの関数で、リストや配列を1次元のラベル付きの配列に変換する。

pd.DataFrame()
pandasの関数で、リストや配列、辞書などを2次元のラベル付きのテーブルに変換する。この2次元のテーブルをDataFrameと呼ぶ。

csvファイルへの書き込み

data.to_csv('./sample.csv',index=False)

カレントディレクトリ内にsample.csvという名前で、data変数をcsvファイルに変換して保存する。indexはデータ分析等には不要なので、保存しないようにしている。

データの状態確認

データの要約情報

data.info()
#DataFrameの要約情報を表示する

データ形式の表示

type(data)
#結果例 pandas.core.frame.DataFrame

data変数のデータ形式を表示する。
*データ形式とは、複数のデータ項目をどのように整理・格納・管理するかを示すもの。データ型とは異なる。例えば、リスト(list)、タプル(tuple)、辞書(dict)、セット(set)などがある。

列(カラム)の表示

data.columns

インデックスの表示

data.index

列(カラム)ごとのデータ型の表示

data.dtypes

列(カラム)ごとのデータ型の変更

data['カラム名'].astype(float)
#'カラム名'のデータ型を float に変更。

行列数の表示

data.shape
#結果例 (5,5)
#(行数,列数)を取得できる。

行数の表示

len(data)
#結果例 100

len()
サイズ(要素数や文字数)を取得する。

列数の表示

len(data.columns)
#結果例 10

全要素数を取得

data.size
#結果例 1000
#行数 * 列数の値と同等

先頭の行を表示

data.head()
#先頭から5行分のデータを表示

data.head(2)
#先頭から2行分のデータを表示

末尾の行を表示

data.tail()
#末尾から5行分のデータを表示

data.tail(3)
#末尾から3行分のデータを表示

任意の行を表示

data[10:20]
#10〜19行目までのデータを取得

data[:5]
#先頭から5行分のデータを取得

data[-5:]
#末尾から5行分のデータを取得

data.loc['行名','カラム名']
#指定した行・カラム名のデータを取得

data.loc['行名','カラム名'] = '挿入したいデータ'
#行・カラムを指定し、データを挿入することができる

data.iloc[0]
#indexが0の行(先頭行)のデータを取得

data.iloc[-1]
#末尾の行のデータを取得

data[data['カラム名'] >= 100]
#指定したカラムの値が 100以上の行を取得

data[data['カラム名'].max()]
#指定したカラムの値が最大値である行を取得

任意の列(カラム)を表示

data[['カラム名']]
#指定したカラムのデータを取得

data[['カラム名1','カラム名2']]
#指定した複数のカラムのデータを取得

任意の値を表示

data.iloc[0]['列名']
#先頭行の'列名'の要素の値を取得

ユニークな要素のカウント

data.unique()
# ユニークな要素の値のリストを取得

data.value_counts()
# ユニークな要素の値とその出現回数を取得

data.nunique()
# ユニークな要素の個数を取得

data.nunique(axis=1)
# 各行に対してユニークな値の数を取得

axis=0
デフォルト値。縦方向、つまり各列に対して操作を行う。

axis=1
横方向、つまり各行に対して操作を行う。

データ集計

データの連結

data = pd.concat(data,add_data),axis=0,sort=True)
# dataと add_dataを連結させる。

data = data.reset_index()
# indexを振り直す。元のindexは`index`というカラムに保存される。

data.drop(['index'], axis=1, inplace=True)
# 上記で作成された`index`カラムを削除する。

sort=True
連結後の列を辞書順にソートするかどうかを指定。

join='inner
連結時にこのオプションを追加すると内部結合となり、重複した列・行は削除される。

.drop
指定したラベルを持つ行・列を削除する。

inplace=True
直接現在のdataを操作する。Falseにすると、新しくデータが作られる。

計算

data.sum()
# dataの各カラムの合計値を取得

data.sum(axis=1)
# dataの各行の合計値を取得

data.mean(axis=1)
# dataの各行の平均値を取得

data.describe().round(1)
# dataの各カラムの統計量を小数点第1位まで算出

data.corr()
# dataの各カラムの相関係数を算出

統計情報とは
平均や散らばりなどのデータを要約した情報。データ全体の構造を把握できる。

相関係数とは
2種類のデータ間の関連性(相関関係)の強さを示す指標。相関係数が1に近いほど、正の相関があると言える。

データ整形

重複・ユニーク値

data['カラム名'].unique()
# 指定したカラムのユニーク値を取得

data[~data['カラム名'].duplicated()]
# 指定したカラムの値がユニークなものだけを抽出する

data.drop_duplicates('カラム名', inplace=True)
# 指定したカラムの値が重複している行を削除する

.duplicated()
要素が重複しているかどうかについて真偽値を返すメソッド。

~
チルダ。真偽値を反転させるメソッド。

.drop_duplicates()
重複した行を削除するメソッド。

欠損値

data.isnull()
# 全ての値を確認し、欠損値の有無により、真偽値を返す。

data.isnull().all()
# 列ごとに欠損値の有無を判定する。列に1つでも欠損値があればFalseを返す。

data.isnull().all(axis=1)
# 行ごとに欠損値の有無を判定する。行に1つでも欠損値があればFalseを返す。

data.isnull().any()
# 欠損値が1つでもある列を取得。

data.isnull().any(axis = 1)
# 欠損値が1つでもある行を取得。

data.dropna
data.dropna(how='any')
# 欠損値が1つでも含まれる行が削除される。

data.dropna(how='all')
# 全ての値が欠損値である行が削除される。

data.dropna(how='all', axis=1)
# 全ての値が欠損値である列が削除される。

.isnull(), .isna()
各要素に対して判定を行い、欠損値があればTrueを表示する。

.notnull(), .notna()
各要素に対して判定を行い、値が存在する場合にTrueを表示する。

文字列の処理

任意の文字列に関するデータ処理

data.str.startswith('文字列')
# '文字列'で始まる要素にTrueを返す。

data[data.str.startswith('文字列')]
# '文字列'で始まる要素を含む行を取得する。

data.str.endswith('文字列')
# '文字列'で終わる要素にTrueを返す。

data.str.containswith('文字列')
# '文字列'を含む要素にTrueを返す。

data['カラム名'].str[0:2]
# 指定したカラム名の列の文字列の内容を、その文字列の最初に2文字だけにスライスする。

data = data.str.strip()
# dataの先頭・末尾の空白の文字を削除する。

data = data.str.strip('x')
# dataの'x'を削除する。

data['カラム名'][index] = data['カラム名'][index].strip('x')
# 指定されたカラム名*indexの値から、文字列'x'を削除する。

参考にさせていただいた記事

https://udemy.benesse.co.jp/data-science/ai/python-numpy.html
https://note.nkmk.me/python-pandas-len-shape-size/#dfshape
https://note.nkmk.me/python-pandas-head-tail/
https://www.sejuku.net/blog/62023
https://note.nkmk.me/python-pandas-at-iat-loc-iloc/#loc-iloc
https://note.nkmk.me/python-pandas-concat/
https://data-viz-lab.com/correlation-coefficient
https://note.nkmk.me/python-pandas-duplicated-drop-duplicates/
https://note.nkmk.me/python-pandas-nan-judge-count/
https://note.nkmk.me/python-pandas-nan-dropna/
https://note.nkmk.me/python-pandas-str-contains-match/

Discussion