pandas.DataFrame あれやこれや

pandasまとめ


# To add a new cell, type '# %%'
# To add a new markdown cell, type '# %% [markdown]'
# %% [markdown]
# pandasまとめ

# %%
import numpy as np
import pandas as pd

# %% [markdown]
# 【【DataFrame作成編】】
# 
# ・辞書
# ・リスト(4つのリストを合体、2次元リストから)
# ・Series型データ
# ・np.arrayデータ
# 
# 上記の方法で↓のDataFrameを作ります。
# 
#     A	B	C	D
# 0	A1	B1	C1	D1
# 1	A2	B2	C2	D2
# 2	A3	B3	C3	D3
# 3	A4	B4	C4	D4

# %%
#【dictから作る】
df1 = pd.DataFrame(data={
    'A': ['A1', 'A2', 'A3', 'A4'],
    'B': ['B1', 'B2', 'B3', 'B4'],
    'C': ['C1', 'C2', 'C3', 'C4'],
    'D': ['D1', 'D2', 'D3', 'D4'] } )
    # indedxは自動設定 0,1,2,3--
print(df1)
df1.index = df1.index + 1 #index=に1を足す 1,2,3,4---

df1


# %%
#【listで作る】
df2 = pd.DataFrame(
    data=[
        ['A1', 'B1','C1','D1'], 
        ['A2', 'B2','C2','D2'], 
        ['A3', 'B3','C3','D3'],
        ['A4', 'B4','C4', 'D4']],
     # indedx,columnsは最初に設定
    columns=['A', 'B','C','D'],
    index=[1,2,3,4]
)
df2


# %%
# 4つの【listから作る】
lst1 = ['A1', 'A2', 'A3', 'A4']
lst2 = ['B1', 'B2', 'B3', 'B4']
lst3 = ['C1', 'C2', 'C3', 'C4']
lst4 = ['D1', 'D2', 'D3', 'D4']
df21 = pd.DataFrame(list(zip(lst1,lst2,lst3,lst4)), 
# indedx,columnsは最初に設定
columns = ['A','B','C','D'],
index=[1,2,3,4])
df21


# %%
# np.arrayでDF
df30 = pd.DataFrame(
    data=np.array([ ['A1', 'B1','C1','D1'], 
                    ['A2', 'B2','C2','D2'], 
                    ['A3', 'B3','C3','D3'],
                    ['A4', 'B4','C4','D4']])  
)
print(df30)
# indexを設定
df30.index=[10,11,12,13]
# cplumnsを設定
df30.columns=['A', 'B','C','D']
print(df30)
# indexを書き換え 
df30=df30.rename(index={10:'KK',12:'GG'})
# cplumnsを書き換え
df30=df30.rename(columns={'B':'BB'})
df30

# %% [markdown]
# ### csvファイル書き出しと読み込み

# %%
#csvで読み込むためファイルを保存、indexを付加しない
df30.to_csv('csv_data.csv')#index=False)


# %%
#csvファイルを読み込む
df4=pd.read_csv('csv_data.csv',index_col=0)
df4

# %% [markdown]
# ## loc[] iloc[] を使った選択と置き換え  
# まずどんな方法でもいいのでDataFrameを作ります

# %%
#【np.arrayの組み合わせで作る】

df3 = pd.DataFrame(
    data=np.array([ ['A1', 'B1','C1','D1'], 
                    ['A2', 'B2','C2','D2'], 
                    ['A3', 'B3','C3','D3'],
                    ['A4', 'B4','C4','D4']]),
    columns=['A', 'B','C','D'],
    index=[1,2,3,4]
)
df3


# %%
# データを確認
print(df3)
df3.index, df3.columns, df3.values


# %%
print(df3['B']) #Series型
print(df3[['B']]) #DataFrame型

# %% [markdown]
# ### indexをピンポイントで置き換え
# 

# %%
# index 全部書き換え
df3.index=['R0','R1','R2','R3']

# %% [markdown]
# ### de.loc[] で選択 df=df.loc[]で置き換え
# [行,列]を行名、列名でスライス的選択 

# %%

#df.loc[行,列]
print(df3.loc['R2']) #行 R2

print(df3.loc['R1','B']) # 行 R1 の列 B =>B2
print(df3.loc['R1':'R2']) # 行 R1-R2

print(df3.loc['R0':'R2','B':'D'])# 行 R0-R2,列 B-D


# %%
print(df3)
# locで値の入れ替え
# df.loc[行,列]=value
print(df3.loc['R1','B']) # 行 R1 の列 B -> 10
df3.loc['R1','B']='MP'#  書き換えは = 値 とする
print(df3.loc['R1','B']) # 行 R1 の列 B =>B2
df3.loc[:,'D']=['XD1','XD2','XD3','XD4'] #行全部、列Dをリストで置き換える
print(df3)

# %% [markdown]
# ### iloc[]で選択、及び書き換え
# [行,列]の数字によるスライスで選択

# %%
print(df3)
# iloc(行,列)
print(df3.iloc[0,0])
print(df3.iloc[0:1,0:2])

# ilocでの書き換え
# iloc(行,列)=[[行方向],[行方向]]
df3.iloc[0:2,1:3]=[[1,2],[10,20]]
df3

# %% [markdown]
# ### [] list 形式を使った取得と置き換え

# %%
df3[1:4] # 行 1,2,3


# %%
df3[['D','A','C']][1:4] #DF[[列、列、列]][行]


# %%
print(df3['C']==20) # 条件抽出 BOOL
df3[df3['C']==20] # Trueのデータを抽出

# %% [markdown]
# ## pd.DataFrame.メソッドによる取得と置き換え

# %%
df3


# %%
# get_locで 行番号列番号を取得
print(df3.index.get_loc('R2')) #R2の行番号を取得 -> 2
print(df3.columns.get_loc('D')) #Dの列番号を取得 -> 3
# locで行名とp列名から行番号列番号を取得して、ilocでそこの値を変更
df3.iloc[df3.index.get_loc('R2'),df3.columns.get_loc('D')]='V100'
df3


# %%
df3.query('C==2') #列名は’ ”” で括らなくていい


# %%
df3.query("A=='A3'") # 命令文は ””で括る


コメント

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