概要
pandas の DataFrame、Series オブジェクトについて解説します。
Series
Series は1次元配列のデータ構造を持つオブジェクトです。 Series はインデックスという値に対応するラベルと名前を持っています。
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()
で表示すると、左側にインデックス、右側に対応する値が出力されます。
Series のインデックスを Series.index
、値を Series.value
、名前を Series.name
、型を Series.dtype
で取得できます。
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
- スカラー値
# 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
を省略した場合、名前なしになります。
s = pd.Series(["a", "b", "c", "d", "e"])
print(s)
0 a 1 b 2 c 3 d 4 e dtype: object
# iterable オブジェクト
s = pd.Series(range(5))
print(s)
0 0 1 1 2 2 3 3 4 4 dtype: int64
dict の キーが Series のインデックス、dict の 値が Series の値として解釈されます。
# 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 になります。
# 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
# スカラー値
s = pd.Series(7)
print(s)
0 7 dtype: int64
デフォルトでは、Series の型は data
から自動で推論されますが、dtype
で型を明示的に指定することもできます。
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
: 要素数
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 はテーブル形式のデータ構造を持つオブジェクトです。
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
で取得できます。
print("index", df.index)
print("columns", df.columns)
index RangeIndex(start=0, stop=6, step=1) columns Index(['都道府県', '人口'], dtype='object')
DataFrame は列ごとに異なる型を持たせることができます。各列の型は DataFrame.dtypes
で確認できます。
print(df.dtypes)
都道府県 object 人口 int64 dtype: object
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
# 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 |
index
、columns
を省略した場合はインデックスは $0, 1, 2, \cdots$ になります。
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
で型を明示的に指定することもできます。
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
: 要素数
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
コメント