2021年2月5日金曜日

行操作 - pandas - python

■インポート


import pandas as pd
 以降の呼び出し簡略化のため「pd」と名前を付ける

■テーブル作成


df = pd.DataFrame({'列名1':[111,222,333],'列名2':['aaa','bbb','ccc'],'列名3':['a',2,'あ']})
print(df)

#出力
#    列名1 列名2 列名3
# 0    111   aaa     a
# 1    222   bbb     2
# 2    333   ccc     あ

■行操作


・1行だけ抜き出す

row = df.loc[1]
print(row)

print(row['列名2'])

#出力
# 列名1    222
# 列名2    bbb
# 列名3      2
# Name: 1, dtype: object
#
# bbb
.loc[]にインデックス名を指定
 シリーズの行版のようなもの
 さらに[ ]で列名を指定して値を抜き出せる

row = df.iloc[2]
print(row)

#出力
# 列名1    333
# 列名2    ccc
# 列名3      あ
# Name: 2, dtype: object
.iloc[]に行数(0始まり)を指定しても同様
 ※この例ではインデックスと行数が等しいのでわかりにくい

・行の値を変更する

df.loc[0] = [444,'ddd','い']
print(df)

#出力
#    列名1  列名2 列名3
# 0  444  ddd   い
# 1  222  bbb   2
# 2  333  ccc   あ
.loc[]にリストを代入
 ※リストのサイズは列数に合わせる

・インデックスを変更する

df.index = ['x','y','z']
print(df)

#出力
#    列名1  列名2 列名3
# x  111  aaa   a
# y  222  bbb   2
# z  333  ccc   あ
 df.indexにリストを代入
 ※リストのサイズは行数に合わせる

df.index= ['x','y','z']
print(df)

df = df.reset_index()
print(df)

#出力
#    列名1  列名2 列名3
# x  111  aaa   a
# y  222  bbb   2
# z  333  ccc   あ
#
#   index  列名1  列名2 列名3
# 0     x  111  aaa   a
# 1     y  222  bbb   2
# 2     z  333  ccc   あ
.reset_index()でインデックスを通し番号で振り直せる
 前のインデックスは列として追加される
.reset_index(drop=True)とすると前のインデックスは残らない

・フィルター

df = df[ df['列名1']>200 ]
print(df)

#出力
#    列名1  列名2 列名3
# 1  222  bbb   2
# 2  333  ccc   あ
[ ]にフィルター条件を記載
 列はシリーズで指定

df = df[ (df['列名1']>200)&(df['列名3']=='あ') ]
print(df)

#出力
#    列名1  列名2 列名3
# 2  333  ccc   あ
 複数条件は「&(and条件)」か「|(or条件)」を使用

■参考


・フィルターについて詳しく

 データフレームをフィルターするには
df[ ]値がTrueかFalseのリストを指定する
df = df[ [False, True, False] ]
print(df)

#出力
#    列名1  列名2 列名3
# 1  222  bbb   2
 リストは残したい行をTrueとし、行数と同じサイズにする

print(df['列名1']>200)

#出力
# 0    False
# 1     True
# 2     True
# Name: 列名1, dtype: bool
 実際に条件部分だけ見ると、TrueかFalseのリストとなっている

0 件のコメント:

コメントを投稿