Python – 4-1. pandas(DataFrame)

pandas(DataFrame)

1. 初期化

import pandas as pd

空のDataFrameを作成

df = pd.DataFrame()
==> Empty DataFrame
==> Columns: []
==> Index: []

初期値を持ったDataFrameを作成

df = pd.DataFrame([['a', 'b', 'c'], [10,20,30]])
==>     0   1   2
==> 0   a   b   c
==> 1  10  20  30

初期値と列名・行名を持ったDataFrameを作成

df = pd.DataFrame([['a', 10], ['b', 20], ['c', 30]], columns=['key', 'val'], index=['A','B','C'])
==>   key  val
==> A   a   10
==> B   b   20
==> C   c   30

numpy配列からDataFrameを作成

DataFrameの内部構造はnumpy配列そのものなので、特に変換処理は必要無い。

import numpy as np
a=np.arange(6).reshape(3,2)
df = df=pd.DataFrame(a, columns=['key','val'])
==>    key  val
==> 0    0    1
==> 1    2    3
==> 2    4    5

2. pandasのデータ構造

df = pd.DataFrame([['a', 10], ['b', 20], ['c', 30], ['d', 40], ['e', 50], ['f', 60]])

列名・行名の定義

df.columns = ['key', 'val']
df.index = ['A', 'B', 'C', 'D', 'E', 'F']
df.loc['A', 'key']

==>   key  val
==> A   a   10
==> B   b   20
==> C   c   30
==> D   d   40
==> E   e   50
==> F   f   60

列名・行名の変更(rename)

df = df.rename(columns={'key': 'label'})
df = df.rename(index={'A': 'A01', 'B': 'A02'})
df.rename(index={'C': 'A03', 'D': 'A04'}, inplace=True)

==>     label  val
==> A01     a   10
==> A02     b   20
==> A03     c   30
==> A04     d   40
==> E       e   50
==> F       f   60

3. 要素数、行数、列数、行/列数の取得

全要素数

>>> df.size
12

行数

>>> len(df)
6

列数

>>> len(df.columns)
2

行/列数

>>> df.shape
(6, 2)

DataFrameの情報

>>> df.info()
<class 'pandas.core.frame.DataFrame'>
Index: 6 entries, A01 to F
Data columns (total 2 columns):
label    6 non-null object
val      6 non-null int64
dtypes: int64(1), object(1)
memory usage: 96.0+ bytes
※ 諸々の情報を出力(値としては取得できない)

インデックス番号の取得(get_loc)

df.index.get_loc('A01')
==> 0
df.columns.get_loc('val')
==> 1

列名にプレフィックス、サフィックスを追加

※既存名の一括修正に使用
df = df.add_prefix('X_')
==>     X_label  X_val
==> A01       a     10
==> A02       b     20
:
後略

df = df.add_suffix('_X')
==>     X_label_X  X_val_X
==> A01         a       10
==> A02         b       20
:
後略
※行名には使用できない

4. データ型

データ型の確認

df = pd.DataFrame([['a', 10], ['b', 20], ['c', 30], ['d', 40], ['e', 50], ['f', 60]], columns = ['key', 'val'])
df.dtypes

==> key    object
==> val     int64
==> dtype: object

列毎のデータ型確認

print(df['key'].dtype)
==> object

print(df['val'].dtype)
==> int64

データ型の変更

float64に変更

df['val'].astype('float64')
==> 0    10.0
==> 1    20.0
==> 2    30.0
==> 3    40.0
==> 4    50.0
==> 5    60.0
==> Name: val, dtype: float64

int64に戻す

df['val'].astype('int64')
==> 0    10
==> 1    20
==> 2    30
==> 3    40
==> 4    50
==> 5    60
==> Name: val, dtype: int64

小数点以下の数値で演算すると自動的にデータ型が変わる

df['val']=df['val']*1.2
==> print(df['val'].dtype)
==> float64

文字列型への変換

文字列型への変換はstrを指定する

df['val'].astype(str)
df['val']=df['val'].astype(str)+'AAA'

※ object型を指定しても、文字列型にはならない

df['val']=df['val'].astype(object)+'AAA'
==> TypeError: unsupported operand type(s) for +: 'float' and 'str'

print(df['val'].dtype)
==> object

2021-09-21

Posted by tfurukaw