3.Pandas配列

Pandasの操作をコマンドプロンプト上で実行する場合は、Pythonを起動後、最初にこのコマンドを実行します。
これにより“pandas.***”と入力するところを“pd.***”と短縮できます。
>>> import pandas as pd

3.1.Pandas配列の構造

Pandasの配列構造には主に次の二つがあります。

種類 次元 構造
Series 一次配列 一次データ配列と、その各要素に対応するIndex(ラベル)を持つデータ構造になります。 Indexも一次配列で、要素数はデータの要素数と一致しなければなりません。
DataFrame 二次配列 二次データ配列(行/列)と、行に対応するIndex(行ラベル)、列に対応するColumns(列ラベル)を持つデータ構造になります。 Index、Columnsはともに一次配列で、要素数はIndex=行数、Columns=列数でなければなりません。 具体的には二次元のテーブル構造となります。

Seriesのデータ構造
ラベル a b c d e
データ 1 2 3 4 5

DataFrameのデータ構造
ラベル 列(columns)
x y z
a 1 10 55
b 2 20 44
c 3 30 33
d 4 40 22
e 5 50 11

他にも三次配列の“Panel”があります。
Pandasデータ構造の詳細についてはPandas documentationを参照ください。

3.2.Pandas配列の作成

3.2.1.一次配列の作成(Series)

Pandasの一次配列は各要素をラベリングした一次元の構造を持ちます(前節参照)。

  1. List/Numpy配列による作成
  2. Dictionaryによる作成

(1)List/Numpy配列による作成

  • pandas.Series(data, index)
data 配列の中身を指定します。 list、Numpy配列(ndarray)で指定できます。 indexを指定すればDataは未指定でもかまいません。 この場合データの全要素に'NaN'が入ります。
index 配列のラベルを指定します。 未指定の場合、0からの連番が定義されます。

#index未指定時 ***********************************
#リストで指定
>>> pd.Series([1,2,3,4,5])
0    1
1    2
2    3
3    4
4    5

#Numpy配列で指定
>>> a = np.array([6,7,8,9,10])
>>> pd.Series(a)
0     6
1     7
2     8
3     9
4    10

#index指定時 *************************************
>>> pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])
a    1
b    2
c    3
d    4
e    5

#数値を直接指定
>>> pd.Series(1,['a','b','c'])
a    1
b    1
c    1

節はじめに戻る


(2)Dictionaryによる作成

  • pandas.Series(Dictionary)
Pythonの“Dictionary”でも設定できます。 この場合は、データとindexを同時に定義できます。
>>> a = {'a':1,'b':2,'c':3}
>>> pd.Series(a)
a    1
b    2
c    3

節はじめに戻る


3.2.2.二次配列の作成(DataFrame)

Pandasの二次配列は、行、列それぞれをラベリングした二次元の構造を持ちます(3.1節参照)。

  1. List/Numpy配列による作成
  2. Dictionaryによる作成

(1)List/Numpy配列による作成

  • pandas.DataFrame(data, index, columns)
data 配列の中身を指定します。 list、Numpy配列(ndarray)で指定できます。 index,columnsを指定すればDataは未指定でもかまいません。 この場合データの全要素に'NaN'が入ります。
index 行方向のラベルを指定します。 未指定の場合、0からの連番がindexラベルに定義されます。
columns 列方向のラベルを指定します。 未指定の場合、0からの連番がcolumnsラベルに定義されます。

#データをlistで指定する場合 **********************
>>> pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]])
   0  1  2
0  1  2  3
1  4  5  6
2  7  8  9

#データをNumpy配列で指定する場合 *****************
>>> a = np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> pd.DataFrame(a)
   0  1  2
0  1  2  3
1  4  5  6
2  7  8  9

#indexを指定する場合 *****************************
>>> pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]],index=['a','b','c'])
   0  1  2
a  1  2  3
b  4  5  6
c  7  8  9

#columnsを指定する場合 ***************************
>>> pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]],index=['a','b','c'],columns=['x','y','z'])
x  y  z
a  1  2  3
b  4  5  6
c  7  8  9

#Dataを未指定とする場合 **************************
# 配列サイズをあらかじめ決めておきたい場合等に使えます。
>>> pd.DataFrame(index=['a','b','c'],columns=['x','y','z'])
     x    y    z
a  NaN  NaN  NaN
b  NaN  NaN  NaN
c  NaN  NaN  NaN

節はじめに戻る


(2)Dictionaryによる作成

  • pandas.DataFrame(Dictionary, index)
Pythonの“Dictionary”でも設定できます。 この場合は、データとcolumnsを同時に定義できます。
>>> dic={'a':[1,2,3],'b':[4,5,6],'c':[7,8,9]}
>>> pd.DataFrame(dic)
   a  b  c
0  1  4  7
1  2  5  8
2  3  6  9

#index指定した場合
>>> pd.DataFrame(dic,index=['x','y','z'])
   a  b  c
x  1  4  7
y  2  5  8
z  3  6  9

節はじめに戻る


3.2.3.データ型

Pandas.Series/DataFrameに入れ込めるデータ型は次のようなものになります。
  • float
  • int
  • complex
  • object
  • datetime
  • bool
#float型
>>> pd.Series([0.1,0.2,0.3],['a','b','c'])
a    0.1
b    0.2
c    0.3
dtype: float64

#int型
>>> pd.Series([1,2,3],['a','b','c'])
a    1
b    2
c    3
dtype: int64

#複素数型
>>> pd.Series([1.+3.j,2.+2.j,3.+1.j],['a','b','c'])
a    (1+3j)
b    (2+2j)
c    (3+1j)
dtype: complex128

#文字列型
>>> pd.Series(['abc','bcd','cde'],['a','b','c'])
a    abc
b    bcd
c    cde
dtype: object

>>> pd.Series([[1,2],[3,4],[3,4]],['a','b','c'])
a    [1, 2]
b    [3, 4]
c    [3, 4]
dtype: object

その他詳細はPandas Manual参照下さい。

節はじめに戻る


参考文献