4-1.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