1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pandas

Last updated at Posted at 2019-11-01

Series

DataFrame

例として、機械学習の入門書でよく使用される iris データセットを使用する。

import pandas as pd
df = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data", header=None, encoding='utf-8')

行名・列名の変更

行方向はインデックスindex、列方向はcolumnsで指定できる。

df.set_axis(['Row1', 'Row2', 'Row3'], axis=0)          # 行名を一括で変更 (行数と引数の要素数は合わせましょう)
df.set_axis(['Row1', 'Row2', 'Row3'], axis='index')    # 行名を一括で変更
df.set_axis(['A', 'B', 'C', 'D', 'E'], axis=1)         # 列名を一括で変更 (列数と引数の要素数は合わせましょう)
df.set_axis(['A', 'B', 'C', 'D', 'E'], axis='columns') # 列名を一括で変更

デフォルトではデータフレームは修正されないので:

df.set_axis(['A', 'B', 'C', 'D', 'E'], axis=1, inplace=True) 

また上記の方法とは別に、

df.index = ... # 何らかのtupleを渡すことができる
df.columns = ['A', 'B', 'C', 'D', 'E'] 

でも修正できる。この場合は元の DataFrame も修正される。

1行ずつ解析

# (1)
for index, row in df.iterrows():
    # index : インデックスの数字
    # row : pandas.Series

# (2)
for row in df.itertuples():
    # row : pandas.core.frame.Pandas

# (3)
for row in df.itertuples(name=None):
    # row : 通常の tuple
    # ex. 0列目の値を参照する
    print(row[0]) 

要素にアクセスする

df.head() # 冒頭の表示、引数に数字を入れることでprintする行数を指定できる
df.tail() # 末尾の表示、<同上>

簡単なDataFrameに対して解説する(6行4列、要素は乱数で初期化された値)

import numpy as np
np.random.seed(123)
df_rnd = pd.DataFrame(
    np.random.randn(6,4), 
    index=['R-0', 'R-1', 'R-2', 'R-3', 'R-4', 'R-5'],
    columns=['C-0', 'C-1', 'C-2', 'C-3'])

#           C-0       C-1       C-2       C-3
# R-0 -1.085631  0.997345  0.282978 -1.506295
# R-1 -0.578600  1.651437 -2.426679 -0.428913
# R-2  1.265936 -0.866740 -0.678886 -0.094709
# R-3  1.491390 -0.638902 -0.443982 -0.434351
# R-4  2.205930  2.186786  1.004054  0.386186
# R-5  0.737369  1.490732 -0.935834  1.175829
# 行の情報を持ってくる
df_rnd.loc["R-0"]  # 行ラベルでアクセスする
df_rnd.iloc[0]     # index番号でアクセスする(ラベル名でのアクセスと同じ結果)
# 複数行の情報を持ってくる
df_rnd.loc[['R-0', 'R-1']] 
df_rnd.loc[0:2]

# 列の情報を持ってくる
df_rnd.loc[:, "C-0"] # 列ラベルでアクセスする
df_rnd.iloc[:, 0]    # 列インデックスでアクセス(2人のageを持ってこれる)

基本的な使い方

リストからDFを作成

リストを用意して、それを用いてDataFrameを初期化すると簡単に作成することができる。

>>> import pandas as pd
>>> list = [["2020/01/01", "12:30", "Yamada", "寝た"], ["2020/01/02", "13:30", "Tanaka", "帰省した"]]
>>> pd.DataFrame(data=list)
            0      1       2     3
0  2020/01/01  12:30  Yamada    寝た
1  2020/01/02  13:30  Tanaka  帰省した

>>> pd.DataFrame(data=list, index=["A","B"], columns=["日付", "時間", "名前", "行動"])
           日付     時間      名前    行動
A  2020/01/01  12:30  Yamada    寝た
B  2020/01/02  13:30  Tanaka  帰省した

DataFrameからSeries

DataFrameのいち部分を切り取ると、Seriesが返ってくる。

>>> list = ["a", "a", "a", "a", "b", "b", "b", "b", "b", "b", "b", "b", "c", "c"]
>>> df = pd.DataFrame(list)
>>> type(df)
<class 'pandas.core.frame.DataFrame'>
>>> type(df[0])
<class 'pandas.core.series.Series'>

テクニック

以下のデータフレームは

list = [['', '', '']]
df = pd.DataFrame()

要素を数える

value_counts()

# DataFrame 
df = pd.read_csv("input.csv")
df.loc[0] // 0行目の取得
df.["列名"] // 指定したcolumn(=列)の値の取得
df.at[0,1] // 0行1列目のデータを取得
df.at[0,"列名"] // 0行目
len(df) 行数
len(df.columns) 列数

## 削除

drop

df.drop(columns='カラム名', axis=1) #行なら1

## 抽出

df[ df['year'].str.contains('2020')]
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?