LoginSignup
2

More than 1 year has passed since last update.

pandas入門

Last updated at Posted at 2021-12-02

目次

1.はじめに
2.pandasとは
3.pandasのインポート
4.pandasのデータ構造
5.データの読み込みと加工
6.おわりに

1. はじめに

最近GCIやE資格取得に向けたプログラムを受けている真っ最中の初学者です。
この記事ではpandasの機能についてまとめていきます。

2. pandasとは

  • pandasとは、プログラミング言語pythonにおいてデータ解析を支援する機能を提供しているオープンソースのライブラリです。データサイエンスの分野では、機械学習前の前処理(データの加工・整形)などで多く使用されます。
  • できること
    • csv,xlsxなどのデータの読み込み
    • 加工, データの抽出
    • 欠損値の補完
    • etc...

3. pandasのインポート

ライブラリをインポートするための構文として以下の3種類があります。

  • import ライブラリ名(モジュール名)
  • import ライブラリ名(モジュール名) as 略称
  • from ライブラリ名(モジュール名) import 機能名

1番目,2番目はライブラリ全体をインポートしたい時、3番目は一部の機能のみインポートしたい時に用いられます。
特に2番目の構文を用いることで、ライブラリの機能を呼び出す際にコードを簡略化することができます。
今回は2番目の構文を用います。 

import pandas as pd

pandaspdという略称で読み込んでいます。pdと略すのは慣例なので特に意味はありません。

4. pandasのデータ構造

pandasのデータ構造には主にSeriesとDataFrameの2種類があります。
(https://pandas.pydata.org/pandas-docs/stable/user_guide/dsintro.html)

Seriesは1次元、DataFrameは2次元のデータを扱う際に用いられます。

  • Seriesの例
series = pd.Series([2,0,2,1,1,2,0,2])
series
出力結果.
0    2
1    0
2    2
3    1
4    1
5    2
6    0
7    2
dtype: int64

Seriesでは左列にindex、右列に要素が入ります。
indexは指定することも可能です。

series = pd.Series([2,0,2,1,1,2,0,2] ,
                   index = ['A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G' , 'H'])
series
出力結果. 

A    2
B    0
C    2
D    1
E    1
F    2
G    0
H    2
dtype: int64
  • DataFrameの例
data = {'student ID':[19001,19002,19003,19004] , 
        'nativeplace':['Tokyo' , 'Kyoto' , 'Fukuoka' , 'Hokkaido'] , 
        'age':[20 , 22 , 43, 19] , 
        'name':['Kota' , 'Yuki' , 'Tomoshi','Kaito']}
dataframe = pd.DataFrame(data)
dataframe

出力結果

student ID nativeplace age name
0 19001 Tokyo 20 Kota
1 19002 Kyoto 22 Yuki
2 19003 Fukuoka 43 Tomoshi
3 19004 Hokkaido 19 Kaito

左から1列目にindexが入ります。
1行目をcolumnと呼びます。

5. データの読み込みと加工

5.1 ファイルの読み込み

  • csvデータの読み込み

pd.read_csvを用いることで読み込むことができます。
以下ではカルフォルニア大学のオープンデータセットを使用しています。
CSVはComma(,) Separated Valuesの略称ですが、セミコロン( ; )で区切られているデータも存在します。その場合は引数にsep = ';'を追加する必要があります。

winequality_data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv' , sep = ';')
winequality_data.head()

出力結果
スクリーンショット 2021-12-02 22.13.32.png

DataFrame.head()とすることで5行目までのデータを表示することが可能です。
任意の行数表示させたい場合はDataFrame.head(10)のように指定することで表示できます。

  • Excelデータの読み込み

pd.ExcelFileを用いることで読み込み可能です。
以下ではcsv同様カルフォルニア大学のオープンデータセットを使用しています。

onlineretail_data = pd.ExcelFile('http://archive.ics.uci.edu/ml/machine-learning-databases/00352/Online%20Retail.xlsx')
onlineretaildata_table = onlineretail_data.parse('Online Retail')
onlineretaildata_table.head()

出力結果
スクリーンショット 2021-12-02 22.23.58.png


5.2 データの状態の確認

  • データの行数,列数の確認

DataFrame.shapeとすることで取得できます。

winequality_data.shape
出力結果.
(1599, 12)
  • データの性質の確認 : DataFrame.info()とすることで変数の型,欠損値の有無などが確認できます。 
winequality_data.info()
出力結果.
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1599 entries, 0 to 1598
Data columns (total 12 columns):
 #   Column                Non-Null Count  Dtype  
---  ------                --------------  -----  
 0   fixed acidity         1599 non-null   float64
 1   volatile acidity      1599 non-null   float64
 2   citric acid           1599 non-null   float64
 3   residual sugar        1599 non-null   float64
 4   chlorides             1599 non-null   float64
 5   free sulfur dioxide   1599 non-null   float64
 6   total sulfur dioxide  1599 non-null   float64
 7   density               1599 non-null   float64
 8   pH                    1599 non-null   float64
 9   sulphates             1599 non-null   float64
 10  alcohol               1599 non-null   float64
 11  quality               1599 non-null   int64  
dtypes: float64(11), int64(1)
memory usage: 150.0 KB
  • 量的データの基本統計量

DataFrame.describe()とすることで量的データの基本統計量を出力できます。量的データとは数字の大小に意味があるデータです。(ex. 身長,体重,値段...)

winequality_data.describe()

出力結果
スクリーンショット 2021-12-02 22.46.52.png

  • 欠損値の確認

DataFrame.isnull().sum()とすることで各列の欠損値(nan)の数を出力できます。

winequality_data.isnull().sum()
出力結果.
fixed acidity           0
volatile acidity        0
citric acid             0
residual sugar          0
chlorides               0
free sulfur dioxide     0
total sulfur dioxide    0
density                 0
pH                      0
sulphates               0
alcohol                 0
quality                 0
dtype: int64

5.3 データの加工

  • 転置

DataFrame.Tとすることで行と列を入れ替えることができます。

dataframe

出力結果

student ID nativeplace age name
0 19001 Tokyo 20 Kota
1 19002 Kyoto 22 Yuki
2 19003 Fukuoka 43 Tomoshi
3 19004 Hokkaido 19 Kaito
dataframe.T

出力結果

0 1 2 3
student ID 19001 19002 19003 19004
nativeplace Tokyo Kyoto Fukuoka Hokkaido
age 20 22 43 19
name Kota Yuki Tomoshi Kaito
  • 特定列の抜き出し

DataFrame['抜き出したい列名(column)']
もしくは
DataFrame.抜き出したい列名(column)

とすることで抜き出すことができます。

1列の抜き出し

dataframe['student ID']
出力結果.
0    19001
1    19002
2    19003
3    19004
Name: student ID, dtype: object

複数列の抜き出し

dataframe[['student ID','age']]

出力結果

student ID age
0 19001 20
1 19002 22
2 19003 43
3 19004 19

複数列を抜き出す場合は括弧を2重にする必要があります。

DataFrame.抜き出したい列名(column) の場合も使い方は基本同じですが、columnにスペースが含まれている場合やcolumnの先頭が数字の場合などは使えないので注意してください。

dataframe.student ID
出力結果.
  File "<ipython-input-48-e3d441d2246b>", line 1
    dataframe.student ID
                       ^
SyntaxError: invalid character in identifier
dataframe.age
出力結果.
0    20
1    22
2    43
3    19
Name: age, dtype: object
  • 特定行の抜き出し

DataFrame[i:j] ( i ≦ 抜き出したい行のindex < j )とすることで任意の行を抜き出せます。
例えばindexが1の行を抜き出したい場合はDataFrame[1:2] となります。

dataframe[1:2]

出力結果

student ID nativeplace age name
1 19002 Kyoto 22 Yuki

i,jの値を変更することで複数行の抜き出しも可能です。
また、indexが文字の場合はDataFrame['index_a':'index_b']とすることで抜き出し可能です。この場合index_bの行まで抜き出されます。

dataframe_eng = pd.DataFrame(data,index=['A','B','C','D'])
dataframe_eng 

出力結果.

student ID nativeplace age name
A 19001 Tokyo 20 Kota
B 19002 Kyoto 22 Yuki
C 19003 Fukuoka 43 Tomoshi
D 19004 Hokkaido 19 Kaito
dataframe_eng['B':'C']

出力結果.

student ID nativeplace age name
B 19002 Kyoto 22 Yuki
C 19003 Fukuoka 43 Tomoshi
  • 特定の行&特定の列の抜き出し

任意の行,任意の列を抜き出す機能としてDataFrame.loc , DataFrame.iloc があります。
iloclocのindex活用版になります。
いずれもDataFrame.(i)loc[抜き出したい行範囲 , 抜き出したい列範囲] とすることで抜き出しができます。
DataFrame.ilocの場合は範囲指定にindexのみが使用できます。

dataframe.loc[1:3, ['nativeplace' , 'age']]

出力結果.

nativeplace age
1 Kyoto 22
2 Fukuoka 43
3 Hokkaido 19
dataframe.iloc[1:4,1:3]

出力結果.

nativeplace age
1 Kyoto 22
2 Fukuoka 43
3 Hokkaido 19

ilocで範囲指定する場合、範囲の右側は含まれないので注意が必要です。

dataframe.iloc[:,1:3]

出力結果

nativeplace age
0 Tokyo 20
1 Kyoto 22
2 Fukuoka 43
3 Hokkaido 19

範囲指定の際に:とすることで全範囲(今回は全ての行)を指定できます。

  • 条件を満たすデータの抽出

DataFrame[条件式] とすることで条件を満たすデータのみを抽出できます。

dataframe[ dataframe['age'] > 20 ]

出力結果

student ID nativeplace age name
1 19002 Kyoto 22 Yuki
2 19003 Fukuoka 43 Tomoshi

and( & ) , or( | )を用いて抽出することもできます。

dataframe[ (dataframe['age'] >= 20) | (dataframe['nativeplace'] =='Fukuoka') ]

出力結果

student ID nativeplace age name
0 19001 Tokyo 20 Kota
1 19002 Kyoto 22 Yuki
2 19003 Fukuoka 43 Tomoshi

6. おわりに

拙い文章ですが最後まで読んでいただきありがとうございました。
何かの役に立てば幸いです。 

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
2