Warning: Undefined variable $position in /home/pystyles/pystyle.info/public_html/wp/wp-content/themes/lionblog/functions.php on line 4897

pandas – DataFrame、Series について

pandas – DataFrame、Series について

概要

pandas の DataFrame、Series オブジェクトについて解説します。

Advertisement

Series

Series は1次元配列のデータ構造を持つオブジェクトです。 Series はインデックスという値に対応するラベルと名前を持っています。

Series の構造

In [1]:
import pandas as pd

s = pd.Series(["a", "b", "c", "d", "e"], index=[1, 2, 3, 4, 5], name="alphabet")
print(s)
1    a
2    b
3    c
4    d
5    e
Name: alphabet, dtype: object

print() で表示すると、左側にインデックス、右側に対応する値が出力されます。

print() の出力例

Series のインデックスを Series.index、値を Series.value、名前を Series.name、型を Series.dtype で取得できます。

In [2]:
print("index", s.index)
print("values", s.values)
print("name", s.name)
print("dtype", s.dtype)
index Int64Index([1, 2, 3, 4, 5], dtype='int64')
values ['a' 'b' 'c' 'd' 'e']
name alphabet
dtype object

Series の作成方法

Series のデータを data、対応するインデックスを index、名前を name に指定します。

Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)

data には次のオブジェクトが指定できます。

  • 1次元配列
  • iterable オブジェクト
  • dict
  • スカラー値
In [3]:
# 1次元配列
s = pd.Series(["a", "b", "c", "d", "e"], index=[1, 2, 3, 4, 5], name="sample")
print(s)
1    a
2    b
3    c
4    d
5    e
Name: sample, dtype: object

index を省略した場合はインデックスは $0, 1, 2, \cdots$ になります。name を省略した場合、名前なしになります。

In [4]:
s = pd.Series(["a", "b", "c", "d", "e"])
print(s)
0    a
1    b
2    c
3    d
4    e
dtype: object
In [5]:
# iterable オブジェクト
s = pd.Series(range(5))
print(s)
0    0
1    1
2    2
3    3
4    4
dtype: int64

dict の キーが Series のインデックス、dict の 値が Series の値として解釈されます。

In [6]:
# dict
s = pd.Series({1: "a", 2: "b", 3: "c", 4: "d", 5: "e"})
print(s)
1    a
2    b
3    c
4    d
5    e
dtype: object

index を指定した場合、dict のキーに存在し、index に存在しない項目は無視されます。また、index に存在し、dict のキーに存在しないインデックスに対応する値は NaN になります。

In [7]:
# dict
s = pd.Series({1: "a", 2: "b", 3: "c", 4: "d", 5: "e"}, index=[3, 4, 5, 6])
print(s)
3      c
4      d
5      e
6    NaN
dtype: object
In [8]:
# スカラー値
s = pd.Series(7)
print(s)
0    7
dtype: int64

デフォルトでは、Series の型は data から自動で推論されますが、dtype で型を明示的に指定することもできます。

In [9]:
s = pd.Series([1, 2, 3, 4, 5], dtype=float)
print(s)
0    1.0
1    2.0
2    3.0
3    4.0
4    5.0
dtype: float64

Series の属性

Series には、以下の属性があります。

  • array: データを ExtensionArray として取得
  • values: データを ndarray として取得
  • index: インデックス
  • name: 名前
  • dtype: 型
  • ndim: 次元数
  • shape: 形状
  • nbytes: バイト数
  • size: 要素数
In [10]:
s = pd.Series([1, 2, 3, 4, 5])

print("array", s.array)
print("values", s.values)
print("index", s.index)
print("name", s.name)
print("dtype", s.dtype)
print("ndim", s.ndim)
print("shape", s.shape)
print("nbytes", s.nbytes)
print("size", s.size)
array <PandasArray>
[1, 2, 3, 4, 5]
Length: 5, dtype: int64
values [1 2 3 4 5]
index RangeIndex(start=0, stop=5, step=1)
name None
dtype int64
ndim 1
shape (5,)
nbytes 40
size 5

DataFrame

DataFrame はテーブル形式のデータ構造を持つオブジェクトです。

In [11]:
import pandas as pd

df = pd.DataFrame(
    {
        "都道府県": ["北海道", "青森", "岩手", "宮城", "秋田", "山形"],
        "人口": [5320, 1278, 1255, 2323, 996, 1102],
    }
)
df
都道府県 人口
0 北海道 5320
1 青森 1278
2 岩手 1255
3 宮城 2323
4 秋田 996
5 山形 1102

行及び列の両方にインデックスを持っています。行のインデックスを DataFrame.index、列のインデックスを DataFrame.columns で取得できます。

DataFrame の構造

In [12]:
print("index", df.index)
print("columns", df.columns)
index RangeIndex(start=0, stop=6, step=1)
columns Index(['都道府県', '人口'], dtype='object')

DataFrame は列ごとに異なる型を持たせることができます。各列の型は DataFrame.dtypes で確認できます。

In [13]:
print(df.dtypes)
都道府県    object
人口       int64
dtype: object
Advertisement

DataFrame の作成方法

class pandas.DataFrame(data=None, index: Optional[Collection] = None, columns: Optional[Collection] = None, dtype: Optional[Union[str, numpy.dtype, ExtensionDtype]] = None, copy: bool = False)

data には次のオブジェクトが指定できます。

  • 2次元配列
  • ndarray
  • Iterable
  • dict
  • DataFrame
In [14]:
# 2次元配列
df = pd.DataFrame(
    [[1, 2, 3], [4, 5, 6], [7, 8, 9]], index=[1, 2, 3], columns=["A", "B", "C"]
)
df
A B C
1 1 2 3
2 4 5 6
3 7 8 9

indexcolumns を省略した場合はインデックスは $0, 1, 2, \cdots$ になります。

In [15]:
df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
df
0 1 2
0 1 2 3
1 4 5 6
2 7 8 9

デフォルトでは、DataFrame の型は data から自動で推論されますが、dtypes で型を明示的に指定することもできます。

In [16]:
df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], dtype=float)
df
0 1 2
0 1.0 2.0 3.0
1 4.0 5.0 6.0
2 7.0 8.0 9.0

DataFrame の属性

DataFrame には、以下の属性があります。

  • values: データを ndarray として取得
  • index: 行のインデックス
  • columns: 列のインデックス
  • axes: (行のインデックス, 列のインデックス)
  • dtypes: 型
  • ndim: 次元数
  • shape: 形状
  • size: 要素数
In [17]:
df = pd.DataFrame(
    [[1, 2, 3], [4, 5, 6], [7, 8, 9]], index=[1, 2, 3], columns=["A", "B", "C"]
)

print("values", df.values, sep="\n")
print("index", df.index)
print("columns", df.columns)
print("axes", df.axes)
print("dtypes", df.dtypes, sep="\n")
print("ndim", df.ndim)
print("shape", df.shape)
print("size", df.size)
values
[[1 2 3]
 [4 5 6]
 [7 8 9]]
index Int64Index([1, 2, 3], dtype='int64')
columns Index(['A', 'B', 'C'], dtype='object')
axes [Int64Index([1, 2, 3], dtype='int64'), Index(['A', 'B', 'C'], dtype='object')]
dtypes
A    int64
B    int64
C    int64
dtype: object
ndim 2
shape (3, 3)
size 9