knaka Tech-Blog

AI, IoT, DIYエレクトロニクス, データサイエンスについて投稿予定です。

pandas info()

index:

.info()

dataFrame についての、情報が表示できます。

importしておきます

#
import numpy as np
import numpy.random as random
import scipy as sp
import pandas as pd
from pandas import Series, DataFrame

データの定義

#
#
a1 = {  'ID':['11','12','13', '14' ]
        ,'num1':[ 101 ,102,103 , 101]
        ,'num2':[ 201 ,202,203 ,204 ]
        ,'num3':[ 301 ,302,303 ,304 ]
        }

frame1 = DataFrame(a1 )
print(frame1 )

結果:

   ID  num1  num2  num3
0  11   101   201   301
1  12   102   202   302
2  13   103   203   303
3  14   101   204   304

info() 実行

frame1.info()

結果:
null 判定, 型の表示ができます。

#
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 4 columns):
ID      4 non-null object
num1    4 non-null int64
num2    4 non-null int64
num3    4 non-null int64
dtypes: int64(3), object(1)
memory usage: 148.0+ bytes

mean

平均値、 num1 の平均を出力します。

#
# 平均値
print( frame1.num1.mean())

結果:

#
101.75

median()

中央値

# 中央値
print( frame1.num1.median())

結果:

101.5

mode()

最頻値:出現する頻度が多い値

print(frame1.num1.mode())

結果:

0    101
dtype: int64

describe()

要約統計量 の表示

#
a1 =frame1.describe()
print(a1 )

結果:

             num1        num2        num3
count    4.000000    4.000000    4.000000
mean   101.750000  202.500000  302.500000
std      0.957427    1.290994    1.290994
min    101.000000  201.000000  301.000000
25%    101.000000  201.750000  301.750000
50%    101.500000  202.500000  302.500000
75%    102.250000  203.250000  303.250000
max    103.000000  204.000000  304.000000

出力内容:

データ数
平均値
標準偏差
最小値
第一四分位数
第二四分位数
第三四分位数
最大値

pandas sort_values()

ソート

指定列で、ソートする。

a2 = {'ID':['11','12','13' ]
        ,'birth':[1980,1973,1970 ]
        ,'type1':['a','b','c'  ]}
frame2 = DataFrame( a2)
#frame2

a3 = frame2.sort_values(by='birth' )
print(a3 )

結果:

   ID  birth type1
2  13   1970     c
1  12   1973     b
0  11   1980     a

欠損値

値を検索し、論理値を返す

# 値があるかどうかの確認
a1 = {'ID':['11','12','13' ]
        ,'city':['Tokyo','Osaka','Kyoto' ]
        ,'num1':[ 101 ,102,103 ]
        }

frame1 = DataFrame(a1 )
print(frame1 )
print(frame1.isin(["Tokyo"]) )

結果:

   ID   city  num1
0  11  Tokyo   101
1  12  Osaka   102
2  13  Kyoto   103
      ID   city   num1
0  False   True  False
1  False  False  False
2  False  False  False

欠損値の取り扱い
nullを判定

a1 = {'ID':['11','12','13' ]
        ,'city':['Tokyo','Osaka', np.nan ]
        ,'num1':[ 101 ,102,103 ]
        }

frame1 = DataFrame(a1 )
print(frame1 )

print(frame1.isnull() )
#nullを判定し、合計する
frame1.isnull().sum()

結果:

  ID   city  num1
0  11  Tokyo   101
1  12  Osaka   102
2  13    NaN   103
      ID   city   num1
0  False  False  False
1  False  False  False
2  False   True  False
ID      0
city    1
num1    0
dtype: int64

pandas merge()

merge()

 dataFrame マージ
結合用のデータを準備しておきます。

#
a1 = {'ID':['11','12','13' ]
        ,'city':['Tokyo','Osaka','Kyoto' ]
        ,'num1':[ 101 ,102,103 ]
        }
frame1 = DataFrame(a1 )
print(frame1 )

a2 = {'ID':['11','12','13' ]
        ,'birth':[1980,1981,1982 ]
        ,'type1':['a','b','c'  ]}
frame2 = DataFrame( a2)
print(frame2 )

結果:

   ID   city  num1
0  11  Tokyo   101
1  12  Osaka   102
2  13  Kyoto   103
   ID  birth type1
0  11   1980     a
1  12   1981     b
2  13   1982     c

マージ

# データのマージ
m1= pd.merge( frame1, frame2)
print(m1)

結果:

   ID   city  num1  birth type1
0  11  Tokyo   101   1980     a
1  12  Osaka   102   1981     b
2  13  Kyoto   103   1982     c

index をキーにして、結合されているようです。

pandas DataFrame

作成

a1 = {'ID':['11','12','13' ]
        ,'city':['Tokyo','Osaka','Kyoto' ]
        ,'num1':[ 101 ,102,103 ]
        }

frame1 = DataFrame(a1 )
print(frame1 )

結果:

   ID   city  num1
0  11  Tokyo   101
1  12  Osaka   102
2  13  Kyoto   103

T

置き換え、行列の転置が可能です。

a2= frame1.T
print(a2)

結果:

          0      1      2
ID       11     12     13
city  Tokyo  Osaka  Kyoto
num1    101    102    103

列名の指定

# 列名の指定
frame1.num1

結果:

0    101
1    102
2    103
Name: num1, dtype: int64

条件フィルター

条件の指定を行い、特定のレコードを抽出できる

# 条件(フィルター)
a2= frame1[frame1['city']=='Tokyo']
print(a2 )

結果:

   ID   city  num1
0  11  Tokyo   101

pandas Series

必要な import

import numpy as np
import numpy.random as random
import pandas as pd
from pandas import Series, DataFrame

配列の作成

# Series
a1 = pd.Series([5,6,7,8,9])
print(a1)
a1 = pd.Series(np.arange(5, 10 ,dtype='f'))
print(a1 )

結果:

0    5
1    6
2    7
3    8
4    9
dtype: int64
0    5.0
1    6.0
2    7.0
3    8.0
4    9.0
dtype: float32

index が自動で付与されるようです。

a1.index

結果:

RangeIndex(start=0, stop=5, step=1)


index の表示ができました。

numpy の行列の作成

numpy の行列の作成 、操作のの説明となります。

reshape()

行列の作成

作成

#行列の作成
a1 = np.arange(9).reshape(3,3)
print(a1 )

結果:

[[0 1 2]
 [3 4 5]
 [6 7 8]]

3×3の行列が、出力されます。

行の取り出し。

0行目

a1[0, :]
<

結果:
>|python|
array([0, 1, 2])

列の取り出し。

0列

a1[: , 0]

結果:

array([0, 3, 6])

dot()

積を求める

a1 = np.arange(1, 3)
print(a1 )
a2 = np.arange(4, 6)
print(a2)

a3 = np.dot(a1, a2)
a3

結果:

[1 2]
[4 5]
14

1次元×1次元の積、 14が出力されました。
(1*4) + (2* 5) = 14

numpy のrandom randn() で乱数生成。

numpy のrandom 等 で乱数操作のの説明となります。
 関連のページ:
https://docs.scipy.org/doc/numpy/reference/routines.random.html

numpyモジュールのimport

import numpy as np
import numpy.random as random

randn()

seed指定で毎回同じ乱数が出る

random.seed(0)

# 正規分布(平均0、分散1)の乱数を10個発生
a1 = random.randn(10)
print( a1 )

結果:

[ 1.76405235  0.40015721  0.97873798  2.2408932   1.86755799 -0.97727788
  0.95008842 -0.15135721 -0.10321885  0.4105985 ]

choice()

ランダム に抽出

# 10個を抽出(重複あり )
print(random.choice(a1,10))

# 10個を抽出(重複なし )
print(random.choice(a1 ,10,replace=False)) 
[ 0.40015721 -0.15135721  0.4105985   0.4105985   2.2408932   0.95008842
 -0.15135721  0.97873798  1.76405235  2.2408932 ]
[ 0.40015721  0.97873798  1.76405235 -0.15135721  0.4105985   0.95008842
 -0.10321885  2.2408932   1.86755799 -0.97727788]