標準python、numpy、pandasを行ったり来たりするために①

  • 249
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

scikitlearnはnumpyしか受け付けないので、pandasでデータ加工した後numpy配列に変換する必要があるし、標準python、numpy、pandasは機能が重複していて混乱するので、まずは基礎の基礎をまとめる。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# インポート
import numpy as np
import scipy as py
import pandas as pd
import itertools as it


'''
作成
'''
# リスト作成
list_value = [10,11,12]
list_value
Out[374]: [10, 11, 12]

# タプル作成
tuple_value = (10,11,12)
tuple_value
Out[375]: (10, 11, 12)

# ディクショナリ作成
dict_value = {0:10,1:11,2:12}
dict_value
Out[376]: {0: 10, 1: 11, 2: 12}

# セット作成
set_value = {10,11,12}
set_value
Out[377]: {10, 11, 12}

# numpy配列作成
ndarray_value = np.array([10,11,12], dtype=np.int32)
ndarray_value
Out[378]: array([10, 11, 12], dtype=int32)

# pandasシリーズ作成
series_value = pd.Series({0:10,1:11,2:12})
series_value
Out[379]: 
0    10
1    11
2    12
dtype: int64

# pandasデータフレーム作成
dataframe_value = pd.DataFrame({'seq':[10,11,12]})
dataframe_value
Out[380]: 
   seq
0   10
1   11
2   12


'''
型(クラス)
'''
# 整数型(クラス)
type(1)
Out[382]: int

# 少数型(クラス)
type(0.1)
Out[383]: float

# 文字列型(クラス)
type('abc')
Out[384]: str

# リスト型(クラス)
type(list_value)
Out[385]: list

# タプル型(クラス)
type(tuple_value)
Out[386]: tuple

# ディクショナリ型(クラス)
type(dict_value)
Out[387]: dict

# セット型(クラス)
type(set_value)
Out[388]: set

# numpy配列型(クラス)
type(ndarray_value)
Out[389]: numpy.ndarray

# pandasシリーズ型(クラス)
type(series_value)
Out[390]: pandas.core.series.Series

# pandasデータフレーム型(クラス)
type(dataframe_value)
Out[391]: pandas.core.frame.DataFrame

# numpyのデータ型
ndarray_value.dtype
Out[392]: dtype('int32')

# pandasシリーズのデータ型
series_value.dtype
Out[393]: dtype('int64')

# pandasデータフレームのデータ型 *エラーになる


'''
型変換
'''
# 文字列型から整数型に変換
int('1')
Out[308]: 1

# 文字列型から少数型に変換
float('1')
Out[309]: 1.0

# 整数型から文字列型に変換
str(1)
Out[310]: '1'

###############
# リストへの変換 #
###############
# タプルから
list(tuple_value)
Out[311]: [10, 11, 12]

# ディクショナリから *上手く変換されない
list(dict_value)
Out[312]: [0, 1, 2]

# セットから
list(set_value)
Out[313]: [10, 11, 12]

# numpy配列から
list(ndarray_value)
Out[314]: [10, 11, 12]

# pandasシリースから
list(series_value)
Out[315]: [10, 11, 12]

# pandasデータフレームから
list(dataframe_value.values.flatten())
Out[318]: [10, 11, 12]

# pandasデータフレームから *上手く変換されない
list(dataframe_value)
Out[316]: ['seq']

# pandasデータフレームから *上手く変換されない
list(dataframe_value.values)
Out[317]: [array([10]), array([11]), array([12])]

###############
# タプルへの変換 #
###############
# タプルへの変換はリストと同じ

######################
# ディクショナリへの変換 #
######################
# pandasシリースから *pandasシリース以外の型からディクショナリに変換できない
dict(series_value)
Out[327]: {0: 10, 1: 11, 2: 12}

###############
# セットへの変換 #
###############
# セットへの変換はリストと同じ

###################
# numpy配列への変換 #
###################
# リストから
np.array(list_value)
Out[354]: array([10, 11, 12])

# タプルから
np.array(tuple_value)
Out[355]: array([10, 11, 12])

# ディクショナリから *上手く変換されない
np.array(dict_value)
Out[356]: array({0: 10, 1: 11, 2: 12}, dtype=object)

# セットから *上手く変換されない
np.array(set_value)
Out[357]: array({10, 11, 12}, dtype=object)

# pandasシリーズから
np.array(series_value)
Out[358]: array([10, 11, 12])

# pandasデータフレームから
In [231]: np.array(dataframe_value.values.flatten())
Out[231]: array([10, 11, 12])

# pandasデータフレームから *上手く変換されない 
np.array(dataframe_value)
Out[359]: 
array([[10],
       [11],
       [12]])

# pandasデータフレームから *上手く変換されない 
np.array(dataframe_value.values)
Out[395]: 
array([[10],
       [11],
       [12]])

#######################
# pandasシリーズへの変換 #
#######################
# リストから
In [232]: pd.Series(list_value)
Out[232]: 
0    10
1    11
2    12
dtype: int64

# タプルから
In [233]: pd.Series(tuple_value)
Out[233]: 
0    10
1    11
2    12
dtype: int64

# ディクショナリから
In [234]: pd.Series(dict_value)
Out[234]: 
0    10
1    11
2    12
dtype: int64

# セットから *エラーになる

# numpy配列から
In [236]: pd.Series(ndarray_value)
Out[236]: 
0    10
1    11
2    12
dtype: int32

# pandasデータフレームから
In [239]: pd.Series(dataframe_value.values.flatten())
Out[239]: 
0    10
1    11
2    12
dtype: int64

# pandasデータフレームから *上手く変換されない
In [237]: pd.Series(dataframe_value)
Out[237]: 
0    (s, e, q)
1    (s, e, q)
2    (s, e, q)
dtype: object

# pandasデータフレームから *エラーになる

############################
# pandasデータフレームへの変換 #
############################
# リストから
In [240]: pd.DataFrame(list_value)
Out[240]: 
    0
0  10
1  11
2  12

# タプルから *エラーになる

# ディクショナリから *エラーになる

# セットから *エラーになる

# numpy配列から
In [244]: pd.DataFrame(ndarray_value)
Out[244]: 
    0
0  10
1  11
2  12

# pandasシリーズから
In [245]: pd.DataFrame(series_value)
Out[245]: 
    0
0  10
1  11
2  12

##########################
# numpy配列のデータ型の変換 #
##########################
# 整数から文字列に変換
In [246]: ndarray_value.astype(np.string_)
Out[246]: 
array([b'10', b'11', b'12'], 
      dtype='|S11')

##############################
# pandasシリーズのデータ型の変換 #
##############################
# 整数から文字列に変換
In [247]: series_value.astype(np.string_)
Out[247]: 
0    b'10'
1    b'11'
2    b'12'
dtype: bytes168

In [248]: dataframe_value.astype(np.string_) 
Out[248]: 
     seq
0  b'10'
1  b'11'
2  b'12'


'''
数列の要素数
'''
# リスト
In [252]: len(list_value)
Out[252]: 3

# タプル
In [253]: len(tuple_value)
Out[253]: 3

# ディクショナリ
In [254]: len(dict_value)
Out[254]: 3

# セット
In [255]: len(set_value)
Out[255]: 3

# numpy配列
In [256]: len(ndarray_value)
Out[256]: 3

# pandasシリーズ
In [257]: len(series_value)
Out[257]: 3

# pandasデータフレーム
In [258]: len(dataframe_value)
Out[258]: 3

########
# 次元 #
########
# numpy配列
In [259]: ndarray_value.ndim
Out[259]: 1
In [260]: ndarray_value.shape
Out[260]: (3,)

# pandasシリーズ
In [261]: series_value.ndim
Out[261]: 1
In [262]: series_value.shape
Out[262]: (3,)

# pandasデータフレーム
In [263]: dataframe_value.ndim
Out[263]: 2

In [264]: dataframe_value.shape
Out[264]: (3, 1)


'''
要素の参照
'''
# リスト
In [266]: list_value[0]
Out[266]: 10
In [267]: list_value[-3]
Out[267]: 10
In [268]: list_value[2]
Out[268]: 12
In [269]: list_value[-1]
Out[269]: 12

# タプルはリストと同じ

# ディクショナリ
In [274]: dict_value[0]
Out[274]: 10
In [275]: dict_value[-3] # *エラーになる
In [276]: dict_value[2]
Out[276]: 12
In [277]: dict_value[-1] # *エラーになる

# セットはインデックス参照をサポートしていない

# numpy配列
In [279]: ndarray_value[0]
Out[279]: 10
In [280]: ndarray_value[-3]
Out[280]: 10
In [281]: ndarray_value[2]
Out[281]: 12
In [282]: ndarray_value[-1]
Out[282]: 12

# pandasシリーズ
In [283]: series_value[0]
Out[283]: 10
In [284]: series_value[-3]  # *エラーになる
In [285]: series_value[2]
Out[285]: 12
In [286]: series_value[-1]  # *エラーになる

# pandasデータフレーム
In [287]: dataframe_value[0] # *エラーになる


'''
総和
'''
# python標準による合計
In [289]: sum(list_value)
Out[289]: 33
In [290]: sum(tuple_value)
Out[290]: 33
In [291]: sum(dict_value)
Out[291]: 3
In [292]: sum(set_value)
Out[292]: 33
In [293]: sum(ndarray_value)
Out[293]: 33
In [294]: sum(series_value)
Out[294]: 33
In [295]: sum(dataframe_value) # *エラーになる

# numpyによる合計
In [296]: np.sum(list_value)
Out[296]: 33
In [297]: np.sum(tuple_value)
Out[297]: 33
In [298]: np.sum(dict_value) # *上手くいかない
Out[298]: {0: 10, 1: 11, 2: 12}
In [299]: np.sum(set_value) # *上手くいかない
Out[299]: {10, 11, 12}
In [300]: np.sum(ndarray_value)
Out[300]: 33
In [301]: np.sum(series_value)
Out[301]: 33
In [302]: np.sum(dataframe_value)
Out[302]: 
seq    33
dtype: int64


'''
順列と組み合わせ
'''
# 順列
seq = ('A','B','C')
len(list(it.permutations(seq,2)))
Out[15]: 6
list(it.permutations(seq, 2))
Out[16]: [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]

# 組み合わせ
len(list(it.combinations(seq,2)))
Out[18]: 3
list(it.combinations(seq, 2))
Out[19]: [('A', 'B'), ('A', 'C'), ('B', 'C')]

# 直積
seq1 = ('A','B')
seq2 = ('C','D')
len(list(it.product(seq1,seq2)))
Out[23]: 4
list(it.product(seq1,seq2))
Out[24]: [('A', 'C'), ('A', 'D'), ('B', 'C'), ('B', 'D')]