【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 |
| 行ラベルの変更方法
df.index = 新しい行ラベルのリスト
:新しい行ラベルを設定df.reset_index(inplace=True)
:行ラベルを通し番号に再設定df.set_index(インデックスにしたい列名, inplace=True)
:指定した列を行ラベルに設定し、列から削除
| 特定データ参照
行と列のラベルを指定することで特定のデータを取得できる
`DataFrame.loc[行ラベル, 列ラベル]
`で指定できる。
<gの値を取得する>
df_loc_rowcol = df.loc['second', 'C'] df_loc_rowcol # 'g'