pandas

【pandas】Seriesの作成方法

【pandas】Seriesの作成方法

pandasでのSeries作成方法について解説します。

pandasのSeriesの作成方法

pandasのSeriesは、インデックス付きの1次元配列で、pandasの中心的なデータ型の一つです。Numpy配列 (ndarray)と同様にインデックスでアクセスできますが、Seriesは文字列のインデックスにも対応しており、Pythonの辞書のように扱えます。また、辞書よりも処理が高速です。

この記事では、Series作成方法について紹介します。

リストやNumPy配列 (ndarray) から作成する

リストやNumpy配列 (ndarray)から簡単にSeriesを作成することができます。

import pandas as pd

# リストからSeriesを作成する
# int
data = pd.Series([1, 5, 2, 4, 5])
print(data, "\n")

# float
data = pd.Series([1.0, 1.5, 2.0, 4.0, 5.0])
print(data)
【実行結果】
0    1
1    5
2    2
3    4
4    5
dtype: int64 

0    1.0
1    1.5
2    2.0
3    4.0
4    5.0
dtype: float64

Seriesでは、実行結果の左側がインデックス、右側が値となっています。また、dtypeは値の型を示します。

リスト同様にNumPyの配列(ndarray)からも以下のようにSeriesを作成できます。

import numpy as np
import pandas as pd

# NumPy配列(ndarray)からSeriesを作成する
# int
arr = np.array([1, 5, 2, 4, 5])
data = pd.Series(arr)
print(data, "\n")

# float
arr = np.array([1.0, 1.5, 2.0, 4.0, 5.0])
data = pd.Series(arr)
print(data)
【実行結果】
0    1
1    5
2    2
3    4
4    5
dtype: int32 

0    1.0
1    1.5
2    2.0
3    4.0
4    5.0
dtype: float64

NumPy配列 (ndarray)が作成されたときの型がint32であったので、作成されたpandasのSeriesint32となっています。int64で作成したい場合は、以下のように書き換えることで対応できます。

data = pd.Series(arr, dtype="int64")

なお、NumPy配列 (ndarray)のデータタイプは実行環境に依存するため、int32int64のどちらかになるかは環境に依存します。

任意のインデックスを指定して作成する

数値や文字列をインデックスとして指定してSeriesを作成することができます。インデックスの指定には、index引数を使用します。

import pandas as pd

# リストからSeriesを作成する
# 任意の数値を指定する
data = pd.Series([1, 5, 2, 4, 5], index=[100, 300, 200, 500, 400])
print(data, "\n")

# 文字列を指定することも可能
data = pd.Series([1, 5, 2, 4, 5], index=["a", "c", "d", "e", "z"])
print(data)
【実行結果】
100    1
300    5
200    2
500    4
400    5
dtype: int64 

a    1
c    5
d    2
e    4
z    5
dtype: int64

辞書から作成する

辞書からもSeriesを作成することができます。作成した辞書をSeriesの引数に渡してインスタンス化します。

import pandas as pd

# 辞書からSeriesを作成する
dic = {"a": 10, "z": 5, "c": 20, "f": 100}
data = pd.Series(dic)
print(data, "\n")

# 辞書の中から一部だけを抽出してSeriesを作成する
data = pd.Series(dic, index=["a", "f", "z"])
print(data)
【実行結果】
a     10
z      5
c     20
f    100
dtype: int64 

a     10
f    100
z      5
dtype: int64

元の辞書のデータの一部を使ってSeriesを作成したい場合には、以下のようにindex引数で一部インデックスを指定することでデータを抽出しつつSeriesの作成ができます。

# 辞書の中から一部だけを抽出してSeriesを作成する
data = pd.Series(dic, index=["a", "f", "z"])

SeriesからNumPy配列 (ndarray) に変換する

Seriesvaluesプロパティを使用することでNumPy配列 (ndarray) に変換することができます。

import pandas as pd

# Seriesを作成する
data = pd.Series([1, 5, 2, 4, 5])
print(data, "\n")

# SeriesからNumPy ndarrayへ変換する
arr_tmp = data.values
print(arr_tmp, type(arr_tmp))
【実行結果】
0    1
1    5
2    2
3    4
4    5
dtype: int32 

[1 5 2 4 5] <class 'numpy.ndarray'>

NumPyとpandasの使い分け

NumPyは大量データの数値計算に適しており高速です。一方、pandasはデータ操作が簡便で、前処理に向いています。通常、データ前処理にpandasを使い、数値計算にはNumPyを使うのが一般的なワークフローです。

まとめ

pandasでのSeries作成方法について解説しました。

Seriesは、Numpy配列 (ndarray) と同様にインデックスでアクセスできますが、文字列インデックスにも対応しており、Pythonの辞書のように扱えます。また、処理も辞書より高速です。

pandasの中心的なデータ型の一つですので、作成方法の基本をしっかり理解してもらえたらと思います。