Python入門 Pandas基礎①

はじめに

Numpy基礎に続いて、Pythonのデータ分析に必須となるPandasについてまとめます。

Pandasはエクセルのような表形式のデータを簡単に取り扱うことの出来る、非常に優れたライブラリです。

SeriesとDataFrame

Pandasには、Seriesと呼ばれる1次元のデータ構造を持つクラスと、DataFrameと呼ばれる2次元のデータ構造を持つクラスが存在します。下図のように、Seriesを組み合わせた物がDataFrameです。いずれも重要なデータ構造なので、それぞれの基本的な操作をについて記載します。

Pandasのインポート

import pandas as pd

Seriesクラス

pd.Series

Seriesを生成できます。

series = pd.Series(data = [1, 2, 3, 4, 5], index = ['A', 'B', 'C', 'D', 'E'])
series
# A    1
# B    2
# C    3
# D    4
# E    5
# dtype: int64

numpyの配列やリストを指定できます。

array = np.arange(1, 11)
index = 'a b c d e f g h i j'.split()

series = pd.Series(data = array, index = index)
series
# a     1
# b     2
# c     3
# d     4
# e     5
# f     6
# g     7
# h     8
# i     9
# j    10
# dtype: int64

データの選択

直接indexを指定してデータを取り出すことも可能ですが、多くの場合はlocメソッドやilocメソッドを使用します。

locメソッドではindex名を、ilocメソッドではデータのindex番号を指定します。

series = pd.Series(data = [1, 2, 3, 4, 5], index = ['A', 'B', 'C', 'D', 'E'])
series['E']
# 5
series['A':'D']
# A    1
# B    2
# C    3
# D    4
# dtype: int64

series.loc

series.loc['A']
# 1
series.loc[['B', 'D']]
# B    2
# D    4
# dtype: int64

series.iloc

series.iloc[0]
# 1
series.iloc[:3]
# A    1
# B    2
# C    3
# dtype: int64

DataFrameクラス

pd.DataFrame

Data Frameを生成できます。

data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
df = pd.DataFrame(data)
df.columns = ['A', 'B', 'C']
df.index = ['a', 'b', 'c']
df

df.head()

df.head()メソッドで、先頭の5行を表示できます。

from sklearn.datasets import load_iris
iris = load_iris()
iris_df = pd.DataFrame(data = iris.data, columns = iris.feature_names)
iris_df.head()

df.tail()

df.tail()メソッドで、末尾の5行を表示できます。

pd.read_csv

pandasを使えば、csvやexcel、HTMLなど様々なファイルを読み込むことが可能です。

df = pd.read_csv('train.csv')
df.head()

csvに日本語が含まれている理由などでエラーが出る場合は、文字コードを指定します。headerの数字を指定することで、csvファイルの読み込みを開始する行を指定することが出来ます。

df = pd.read_csv('---.csv', header = 100, encoding = 'shift-jis')

データの概要把握

df.shape

DataFrameの形状を確認できます。

df.shape
# (891, 12)

df.describe()

DataFrameの各種統計量を確認することが可能です。

df.describe()

df.info()

各データ型とnullではない数を確認できます。

df.info()

’’’
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   PassengerId  891 non-null    int64  
 1   Survived     891 non-null    int64  
 2   Pclass       891 non-null    int64  
 3   Name         891 non-null    object 
 4   Sex          891 non-null    object 
 5   Age          714 non-null    float64
 6   SibSp        891 non-null    int64  
 7   Parch        891 non-null    int64  
 8   Ticket       891 non-null    object 
 9   Fare         891 non-null    float64
 10  Cabin        204 non-null    object 
 11  Embarked     889 non-null    object 
dtypes: float64(2), int64(5), object(5)
memory usage: 83.7+ KB
'''

df.nunique()

ユニークな値の数を確認することができます。

df.nunique()

’’’
PassengerId    891
Survived         2
Pclass           3
Name           891
Sex              2
Age             88
SibSp            7
Parch            7
Ticket         681
Fare           248
Cabin          147
Embarked         3
dtype: int64
’’’

df.isnull()

欠損値の数を確認できます。

df.isnull().sum()

’’’
PassengerId      0
Survived         0
Pclass           0
Name             0
Sex              0
Age            177
SibSp            0
Parch            0
Ticket           0
Fare             0
Cabin          687
Embarked         2
dtype: int64
’’’

df.index (行名)

df.index
# RangeIndex(start=0, stop=891, step=1)

df.columns (列名)

df.columns
# Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',
#        'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],
#        dtype='object')

続きは次回の投稿に記載します。