Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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')]
richi40
python、centos or fedora好きの機械学習/統計解析プログラマーです。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした