Diagonal M

データサイエンス系長期インターンで学んだことなど

【Python】pandas基礎vol.3 ~DataFrame~

| Pandasのデータ構造(DataFrame)

pandasでよく使われるデータ構造として1次元のSeries、2次元のDataFrameがある。

| DataFrame(データフレーム)

Seriesは1次元だったが、DataFrameは2次元のデータ構造である。

列と行にそれぞれにラベルを持っており、それぞれを列ラベル、行ラベルと呼ぶ。

<DataFrameの作成>

import pandas as pd

df = pd.DataFrame([list('abcd'), list('efgh')])
df
0 1 2 3
0 a b c d
1 e f g h

行ごとにリストを指定し、DataFrameを作成した。

データフレーム初期化時に、データとして2次元のリストだけを渡すと、列ラベルと行ラベルには0から始まる連番が設定される。

<DataFrameのデータに設定されている値を確認する>

df_values = df.values
df_values


# array([['a', 'b', 'c', 'd'],
#        ['e', 'f', 'g', 'h']], dtype=object)

<DataFrameの列ラベルを確認する>

df_columns = df.columns
df_columns

# RangeIndex(start=0, stop=4, step=1)

<DataFrameの行ラベルに設定されている値を確認する>

df_index = df.index
df_index


# RangeIndex(start=0, stop=2, step=1)

行ラベルはdf.index、列ラベルはdf.columnsでアクセスできる。

| DataFrameの列ラベルの変更と列の取得

列の値を参照する時は、辞書のようなアクセスdf[列ラベル]かプロパティーによるアクセスdf.列ラベルが可能である。参照結果はSeriesとして返される。

<列ラベルの変更>

df.columns=list('ABCD')
df
A B C D
0 a b c d
1 e f g h

<列ラベルで参照>

df['A']


# 0    a
# 1    e
# Name: A, dtype: object

<リストして表示>

df['A'].tolist()


# ['a', 'e']

| 行ラベルでのデータ参照

行ごとにデータを参照したい場合はDataFrame.loc,DataFrame.ilocを使う。

列ラベルを指定して列を取得したときと同様にシリーズを取得できる。

df_loc = df.loc[行ラベル]と指定すると、指定した行ラベルが対応している行のデータがシリーズとして返される。df.loc[1]は2行目のデータを指定している。

<データフレームの作成>

import pandas as pd

# DataFrameの作成
df = pd.DataFrame(
    [list('abcd'), list('efgh'),
     list('ijkl'), list('mnop')],
    columns=['A', 'B', 'C', 'D'])
df
A B C D
0 a b c d
1 e f g h
2 i j k l
3 m n o p

<2行目の取得>

df_loc = df.loc[1]
df_loc


# A    e
# B    f
# C    g
# D    h
# Name: 1, dtype: object

<リストとして取得>

df_loc = df.loc[1].tolist()
df_loc


# ['e', 'f', 'g', 'h']

| 行ラベルの設定

行ラベルはデフォルトで0, 1, 2, 3と0から始まる数字が設定が設定される。

行ラベルは任意の値を設定できる。

<行ラベルに'first', 'second', 'third', 'forth'を設定する>

import pandas as pd

# 行ラベルをつける
df = pd.DataFrame(
    [list('abcd'), list('efgh'),
     list('ijkl'), list('mnop')],
    index=['first', 'second', 'third', 'fourth'],
    columns=list('ABCD'))
df
A B C D
first a b c d
second e f g h
third i j k l
fourth m n o p

| 行ラベルの変更方法

  1. df.index = 新しい行ラベルのリスト:新しい行ラベルを設定
  2. df.reset_index(inplace=True):行ラベルを通し番号に再設定
  3. df.set_index(インデックスにしたい列名, inplace=True):指定した列を行ラベルに設定し、列から削除

| 特定データ参照

行と列のラベルを指定することで特定のデータを取得できる

`DataFrame.loc[行ラベル, 列ラベル] `で指定できる。

<gの値を取得する>

df_loc_rowcol = df.loc['second', 'C']
df_loc_rowcol


# 'g'