pandas:【列名リスト】【行数】【タイプ】
はじめに
ここに書いてあること
- データフレームの情報をコマンドで確認する方法
- 含まれているデータがどんなものか
- インデックス列、行数、列名、データタイプ、含まれるデータの種類
前提
- データ(データフレーム)作成
- set_index
- インデックス列ってどれ?
- pandas:【基礎】最初に知っておきたいこと
- インデックス列の指定
- np.random.choice
- 出現率を指定したデータ取り出し
- NumPy:【np.random】のあれこれ(実行結果で説明)
サンプルコード
インデックス列の内容
データ作成
import numpy as np
import pandas as pd
df = pd.DataFrame({'id':['a01','a02','a03','a04','a05'],'value':[10,20,30,40,50]})
df.set_index('id', drop=True, inplace=True)
print(df)
print(df.shape)
id a01 10 a02 20 a03 30 a04 40 a05 50 (5, 1)
- サイズ(5,1)のデータ(データフレーム)を作成
- インデックス列id
- 列名valueの1つ
1つだけ取り出し
a = df.index[0]
print(a)
print(type(a))
a01 <class 'str'>
- 0(df.index[…]の引数)
- 1つだけ取り出す場合
- 行のインデックス番号を指定する
- インデックス番号0の値a01が戻される
- 取り出したデータはstr型
複数行の取り出し
b = df.index[[1,3]]
print(b)
print(type(b))
Index(['a02', 'a04'], dtype='object', name='id') <class 'pandas.core.indexes.base.Index'>
- [1,3]
- 複数の場合、リストで指定
- インデックス番号1,3を取り出す
- ['a02’, 'a04’]が取り出される
- データ型はpandasのIndex型
列名
データ作成
import numpy as np
import pandas as pd
df = pd.DataFrame(np.arange(10).reshape(2,5), columns=('a','b','c','d','f'))
print(df)
print(df.shape)
a b c d f 0 0 1 2 3 4 1 5 6 7 8 9 (2, 5)
- サイズ(2,5)のデータ(データフレーム)を作成
列名全体取り出し
col = df.columns
print(col)
Index(['a', 'b', 'c', 'd', 'f'], dtype='object')
- df.columns
- 引数なしで実行
- 列の全体が取得できる
列名部分取り出し
x = df.columns[3]
y = df.columns[1:4]
z = df.columns[[0,3,4]]
print(x)
print(y)
print(z)
d Index(['b', 'c', 'd'], dtype='object') Index(['a', 'd', 'f'], dtype='object')
- x
- 1つだけ取り出し
- インデックス番号3の列はd(0から始まる)
- y
- 範囲指定「:」
- インデックス番号1~3(4は含まない)
- 取り出される列はb,c,dの連続した3つ
- z
- 取り出したい列を選択
- 選択した列のインデックス番号は0,3,4
- [0,3,4]のようにリストで指定
- 取り出される列はa,d,fのように任意
行数
データ作成
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randn(20,5), columns=('a','b','c','d','f'))
print(df)
print(df.shape)
a b c d f 0 -0.531280 1.029733 -0.438136 -1.118318 1.618982 1 1.541605 -0.251879 -0.842436 0.184519 0.937082 2 0.731000 1.361556 -0.326238 0.055676 0.222400 3 -1.443217 -0.756352 0.816454 0.750445 -0.455947 4 1.189622 -1.690617 -1.356399 -1.232435 -0.544439 5 -0.668172 0.007315 -0.612939 1.299748 -1.733096 6 -0.983310 0.357508 -1.613579 1.470714 -1.188018 7 -0.549746 -0.940046 -0.827932 0.108863 0.507810 8 -0.862227 1.249470 -0.079611 -0.889731 -0.881798 9 0.018639 0.237845 0.013549 -1.635529 -1.044210 10 0.613039 0.736205 1.026921 -1.432191 -1.841188 11 0.366093 -0.331777 -0.689218 2.034608 -0.550714 12 0.750453 -1.306992 0.580573 -1.104523 0.690121 13 0.686890 -1.566688 0.904974 0.778822 0.428233 14 0.108872 0.028284 -0.578826 -1.199451 -1.705952 15 0.369164 1.876573 -0.376903 1.831936 0.003017 16 -0.076023 0.003958 -0.185014 -2.487152 -1.704651 17 -1.136261 -2.973315 0.033317 -0.248889 -0.450176 18 0.132428 0.022214 0.317368 -0.752414 -1.296392 19 0.095139 -0.423715 -1.185984 -0.365462 -1.271023 (20, 5)
- サイズ(20,5)のデータ(データフレーム)作成
lenを使う
a = len(df)
print(a)
20
- 行数20が取得できる
shapeを使う
a = df.shape[0]
print(a)
20
- 行数20が取得できる
df.indexで確認する
df.reset_index(drop=True, inplace=True)
b = df.index
sta = df.index.start
sto = df.index.stop
ste = df.index.step
print(b)
print('start:'+str(sta))
print('stop:'+str(sto))
print('step:'+str(ste))
RangeIndex(start=0, stop=20, step=1) start:0 stop:20 step:1
- stopが行数
- df.reset_index
- インデックス番号をリセットする
- 欠番があると正しい行数にならないため実行する
- drop=True
- 更新前のインデックス番号を保持しない
- inplace=True
- データを更新
- inplace=False(デフォルト)は元データを更新しない
データタイプ
データ作成
import numpy as np
import pandas as pd
df = pd.Series({'a':100,'b':0.1,'c':'x','d':[0,1,2],'e':(0,1,2)})
print(df)
a 100 b 0.1 c x d [0, 1, 2] e (0, 1, 2) dtype: object
- 1行(Series)作成
列ごとにどのようなデータがあるか
a = type(df.a)
b = type(df.b)
c = type(df.c)
d = type(df.d)
e = type(df.e)
print('a:'+str(a))
print('b:'+str(b))
print('c:'+str(c))
print('d:'+str(d))
print('e:'+str(e))
a:b:<class 'float'> c:<class 'str'> d:<class 'list'> e:<class 'tuple'>
- pythonの様々なデータタイプを格納できる
- a
- int
- 数値型
- b
- float
- 浮動小数点型
- c
- str
- 文字列型
- d
- list
- リスト型
- e
- tuple
- タプル型
データ種類
データ作成
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.choice(np.arange(10,20),90,p=[0.10,0.05,0.15,0.07,0.13,0.01,0.19,0.04,0.16,0.10]).reshape(30,3), columns=('a','b','c'))
print(df)
print(df.shape)
a b c 0 11 18 11 1 18 18 14 2 12 16 10 3 13 19 12 4 18 18 12 5 16 14 10 6 10 14 16 7 18 14 10 8 10 13 11 9 12 12 10 10 16 14 14 11 12 11 10 12 13 14 12 13 16 12 16 14 14 16 17 15 10 16 16 16 10 18 11 17 13 16 19 18 16 12 11 19 16 14 11 20 17 14 16 21 10 16 13 22 13 14 18 23 13 18 16 24 18 10 10 25 16 14 12 26 10 12 13 27 18 12 13 28 11 14 12 29 16 12 11 (30, 3)
- 出現率を変えて10~19までの数字をランダム作成
- サイズは(30,3)
列ごとにどのようなデータがあるか
a = df.a.unique()
b = df.b.unique()
c = df.c.unique()
print(a)
print('len(a):'+str(len(a)))
print(b)
print('len(b):'+str(len(b)))
print(c)
print('len(c):'+str(len(c)))
[11 18 12 13 16 10 14 17] len(a):8 [18 16 19 14 13 12 11 10] len(b):8 [11 14 10 12 16 17 19 13 18] len(c):9
- df.uniqueを使う
- 縦方向にデータを見る
- 30個の内、登場した数字を列挙する
- もし全部登場するなら10~19までの全10個
- a(1列目)
- 15と19は出現しなかった
- 出現パターンは8個/全10個中
- b(2列目)
- 15と17は出現しなかった
- 出現パターンは8個/全10個中
- c(3列目)
- 15は出現しなかった
- 出現パターンは9個/全10個中
- 参考
- それぞれの数字が何回出現したかを確認する方法もある
- Excelで言うとピボット集計のようなデータの集計で「value_counts」を利用する
- 詳細は別記事で説明

