LoginSignup
432

More than 5 years have passed since last update.

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

Posted at

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')]

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
432