pandas dataframe 列 取得

基本

df['カラム名のリスト']

全てこれ
かぎかっこ内にカラム名のリストを指定する形へもっていく

column名で取得

import pandas as pd
import numpy as np

# DataFrame作成
df = pd.DataFrame([[25,'pika',88,'Electric',np.NaN,np.NaN],
                   [131,'rara',80,'Water','Ice',np.NaN],
                   [143,'gon',82,'Normal',np.NaN,np.NaN],
                   [3,'fushi',84,'Grass','Poison',np.NaN],
                   [6,'kage',84,'Fire','Flying',np.NaN],
                   [9,'kame',84,'Water',np.NaN,np.NaN]],
                  columns=['no','name','level','type1','type2','helditem'])

# nameとlevelの列(カラム)抽出
print(df[['name','level']])

"""
    name  level
0   pika     88
1   rara     80
2    gon     82
3  fushi     84
4   kage     84
5   kame     84
"""

列番号で取得

列番号でカラム名を取得して列を抽出する

# DataFrameは上記のを利用

# nameとlevelの列(カラム)抽出
print(df[df.columns[1:3]])

"""
    name  level
0   pika     88
1   rara     80
2    gon     82
3  fushi     84
4   kage     84
5   kame     84
"""

要は

df.columns[1:3]

['name','level']

となるため、結局column名で取得と同じとなる

1列だけ抽出するときの注意

df['name']

だとSeriesで出力となる

# DataFrameは最初のを利用

# name列(カラム)抽出
print(df['name'])

"""
0     pika
1     rara
2      gon
3    fushi
4     kage
5     kame
Name: name, dtype: object
"""

typeを確認すると

print(type(df['name']))

"""
<class 'pandas.core.series.Series'>
"""

DataFrameで1列を抽出したいときは

df[['name']]

かぎかっこで括ってリストの形にすること

列番号で取得したいときも同じ

df[df.columns[1]]

だとSeries

df[[df.columns[1]]]

だとDataFrame

飛び飛びの複数列を指定

カラム名で指定する場合

そのままリストに直打ちすれば大丈夫

# DataFrameは最初のを利用

# noとtype1,type2の列(カラム)抽出
print(df[['no','type1','type2']])

"""
    no     type1   type2
0   25  Electric     NaN
1  131     Water     Ice
2  143    Normal     NaN
3    3     Grass  Poison
4    6      Fire  Flying
5    9     Water     NaN
"""

列番号で指定する場合

# DataFrameは最初のを利用

# ライブラリ追加
from operator import itemgetter

# noとtype1,type2の列(カラム)抽出
print(df[list(itemgetter(0,3,4)(df.columns))])

"""
    no     type1   type2
0   25  Electric     NaN
1  131     Water     Ice
2  143    Normal     NaN
3    3     Grass  Poison
4    6      Fire  Flying
5    9     Water     NaN
"""

または

# DataFrameは最初のを利用

# noとtype1,type2の列(カラム)抽出
column_selection = np.array([1,0,0,1,1,0])    # 抽出する列の指定(1の列を抽出)
print(df[np.array(df.columns)[column_selection==1]])

"""
    no     type1   type2
0   25  Electric     NaN
1  131     Water     Ice
2  143    Normal     NaN
3    3     Grass  Poison
4    6      Fire  Flying
5    9     Water     NaN
"""

これらのリスト作成方法についてはまた解説する

コメント

タイトルとURLをコピーしました