pandas:【列名リスト】【行数】【タイプ】


はじめに

ここに書いてあること

  • データフレームの情報をコマンドで確認する方法
  • 含まれているデータがどんなものか
  • インデックス列、行数、列名、データタイプ、含まれるデータの種類

前提

サンプルコード

インデックス列の内容

データ作成

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)

列ごとにどのようなデータがあるか

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」を利用する
    • 詳細は別記事で説明


Posted by futa