#1 目的
Pandas,Numpyを使いデータ配列の操作を行う方法を記録しておく。
題名 | リンク |
---|---|
【python】Pandasの使い方 | LINK |
【python】Pandas2の使い方 | LINK |
【python】Pandas3の使い方 | LINK |
【python】Pandas4の使い方 | LINK |
【python】Pandas5の使い方 | LINK |
【python】Pandas ,pythonコードメモ 6 | LINK |
#2 CVSデータを扱う
##2-1 CSVデータを読み取る
CSVファイルサンプル。列名が初めから含まれている。
DATE,CLOSE,OPEN,HIGH,LOW,VOL
2020-01-21,22720,23140,23150,22710,4729711
2020-01-22,23050,22670,23080,22670,3345936
2020-01-23,22600,22690,22840,22570,5629196
##2-2 CSVデータ読み取り(列名も一緒に読み出す)
CSVファイルを読み取るコード(CSVファイルの列名も一緒に読み出す)
import pandas as pd
#index_col=0は列名もデータと一緒に取り出す。
matrix= pd.read_csv("sample.csv", index_col=0)
print(matrix)
実行結果
root@2a1627805ea9:/home/sampletest# python3 sample.py
#DATEがindexとなっている。
CLOSE OPEN HIGH LOW VOL
DATE
2020-01-21 22720 23140 23150 22710 4729711
2020-01-22 23050 22670 23080 22670 3345936
2020-01-23 22600 22690 22840 22570 5629196
##2-3 CSVデータ読み取り(indexを日付型に変換する)
import pandas as pd
matrix= pd.read_csv("sample.csv",encoding='utf-8',parse_dates=True) #index_col=0は列名もデータと一緒に取り出す。
print(matrix)
実行結果
root@2a1627805ea9:/home/sampletest# python3 sample.py
CLOSE OPEN HIGH LOW VOL
DATE
2020-01-21 22720 23140 23150 22710 4729711
2020-01-22 23050 22670 23080 22670 3345936
2020-01-23 22600 22690 22840 22570 5629196
##2-4 CSVデータ読み取り、列名を設定する。
サンプルデータ。列名が付与されていない。
2020-01-21,22720,23140,23150,22710,4729711
2020-01-22,23050,22670,23080,22670,3345936
2020-01-23,22600,22690,22840,22570,5629196
import pandas as pd
#names=["x","xx",・・・]は列名を付与する。
matrix= pd.read_csv("sample.csv", names=["DATE","CLOSE","OPEN","HIGH","LOW","VOL"])
print(matrix)
実行結果
root@2a1627805ea9:/home/sampletest# python3 sample.py
DATE CLOSE OPEN HIGH LOW VOL
0 2020-01-21 22720 23140 23150 22710 4729711
1 2020-01-22 23050 22670 23080 22670 3345936
2 2020-01-23 22600 22690 22840 22570 5629196
##2-5 CSVデータ読み取り、INDEX列を指定する。
サンプルデータ
2020-01-21,22720,23140,23150,22710,4729711
2020-01-22,23050,22670,23080,22670,3345936
2020-01-23,22600,22690,22840,22570,5629196
import pandas as pd
#index_col=0は、最左列をindexに設定する。
#parse_dates=Trueはindexを日付型に変換する。
matrix= pd.read_csv("sample.csv", index_col=0,parse_dates=True,names=["DATE","CLOSE","OPEN","HIGH","LOW","VOL"])
print(matrix)
実行結果
root@2a1627805ea9:/home/sampletest# python3 sample.py
CLOSE OPEN HIGH LOW VOL
DATE
2020-01-21 22720 23140 23150 22710 4729711
2020-01-22 23050 22670 23080 22670 3345936
2020-01-23 22600 22690 22840 22570 5629196
##2-6 配列データをCSVファイルに書き出す。
df_ichimokumat.to_csv("test.csv")
#3 行列を作成する。
##3-1 列名を持つすべて0の行列を作成する。
import pandas as pd
matrix = pd.DataFrame(0,index=["2020-1-28","2020-1-29"], columns=['CLOSE', 'OPEN', 'HIGH', 'LOW', 'VOL'])
matrix.index.name = "DATE" #index列に名前をつける。
print(matrix)
実行結果
root@2a1627805ea9:/home/sampletest# python3 sample.py
CLOSE OPEN HIGH LOW VOL
DATE
2020-1-28 0 0 0 0 0
2020-1-29 0 0 0 0 0
##3-2 空の列を追加し、追加した列にデータを配置する
import pandas as pd
import numpy as np
#一旦マトリックスを作成する。
df = pd.DataFrame({'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]},
index=['ONE', 'TWO', 'THREE'])
print(df)
#空データの列'D', 列'E'を加える。
df=pd.DataFrame(df,columns=['A', 'B', 'C', 'D', 'E'])
print(df)
#列'D'にデータを配置する。
df['D']=[9,10,11]
print(df)
実行結果
root@2a1627805ea9:/home/sampletest# python3 sample.py
#一旦マトリックスを作成する。
A B C
ONE 1 4 7
TWO 2 5 8
THREE 3 6 9
#空データの列'D', 列'E'を加える。
A B C D E
ONE 1 4 7 NaN NaN
TWO 2 5 8 NaN NaN
THREE 3 6 9 NaN NaN
#列'D'にデータを配置する。
A B C D E
ONE 1 4 7 9 NaN
TWO 2 5 8 10 NaN
THREE 3 6 9 11 NaN
##3-3 データを定義し、行列を生成する。(その1)
import pandas as pd
import numpy as np
#一旦マトリックスを作成する。
df = pd.DataFrame({'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]},
index=['ONE', 'TWO', 'THREE'])
print(df)
#空データの列'D', 列'E'を加える。
df=pd.DataFrame(df,columns=['A', 'B', 'C', 'D', 'E'])
print(df)
#列'D'にデータを配置する。
df['D']=[9,10,11]
print(df)
実行結果
A B C
ONE 1 4 7
TWO 2 5 8
THREE 3 6 9
A B C D E
ONE 1 4 7 NaN NaN
TWO 2 5 8 NaN NaN
THREE 3 6 9 NaN NaN
A B C D E
ONE 1 4 7 9 NaN
TWO 2 5 8 10 NaN
THREE 3 6 9 11 NaN
##3-4 データを定義し、行列を生成する。(その2)
import pandas as pd
import numpy as np
dat = [
['2019-07-01','9997','740'],
['2019-07-02','9997','749'],
['2019-07-03','9997','757'],
['2019-07-04','9997','769'],
['2019-07-05','9997','762'],
['2019-07-08','9997','760']
]
df4 = pd.DataFrame(dat,columns=["A","B","C"])
print(df4)
実行結果
A B C
0 2019-07-01 9997 740
1 2019-07-02 9997 749
2 2019-07-03 9997 757
3 2019-07-04 9997 769
4 2019-07-05 9997 762
5 2019-07-08 9997 760
##3-5 2行2列の乱数(正規分布)を作成する。
import pandas as pd
import numpy as np
mean=[0,0] #2次元正規分布の平均を指定する。
cov=[[1,0],[0,10]] #2次元正規分布の分散を指定する。
#平均mean,分散covに従う2次元正規分布に従う乱数を指定する。
dset=np.random.multivariate_normal(mean,cov,1000)
#dsetをDataFrameに格納する。
df=pd.DataFrame(dset,columns=['X','Y'])
print(df)
実行結果
X Y
0 -0.632174 1.316482
1 1.298250 -2.004519
2 -1.289775 -9.468985
3 1.107289 2.853592
4 -1.104606 -1.400572
.. ... ...
995 -1.975120 -4.199171
996 -0.022915 -0.861581
997 0.198733 -1.256023
998 -1.410785 0.127125
999 0.945026 -5.554634
[1000 rows x 2 columns]
#4 演算処理
##4-1 n番目のデータとn-1番目のデータの変化率を算出する。(欠損データ処理も行う)
import pandas as pd
#CSVファイルからデータを読み取る。
matrix= pd.read_csv("sample.csv", index_col=0,parse_dates=True,names=["DATE","CLOSE","OPEN","HIGH","LOW","VOL"])
print(matrix)
#n番目のデータとn-1番目のデータの変化率を算出する。
ptc_matrix=matrix.pct_change()
print(ptc_matrix)
#欠損データを削除する。
ptc_matrix=ptc_matrix.dropna()
print(ptc_matrix)
実行結果
root@2a1627805ea9:/home/sampletest# python3 sample.py
CLOSE OPEN HIGH LOW VOL
DATE
2020-01-21 22720 23140 23150 22710 4729711
2020-01-22 23050 22670 23080 22670 3345936
2020-01-23 22600 22690 22840 22570 5629196
#n番目のデータとn-1番目のデータの変化率を算出する。
CLOSE OPEN HIGH LOW VOL
DATE
2020-01-21 NaN NaN NaN NaN NaN
2020-01-22 0.014525 -0.020311 -0.003024 -0.001761 -0.292571
2020-01-23 -0.019523 0.000882 -0.010399 -0.004411 0.682398
#欠損データを削除する。
CLOSE OPEN HIGH LOW VOL
DATE
2020-01-22 0.014525 -0.020311 -0.003024 -0.001761 -0.292571
2020-01-23 -0.019523 0.000882 -0.010399 -0.004411 0.682398
##4-2 各列の平均と分散を計算する
import pandas as pd
import numpy as np
#CSVファイルからデータを読み取る。
matrix= pd.read_csv("sample.csv", index_col=0,parse_dates=True,names=["DATE","CLOSE","OPEN","HIGH","LOW","VOL"])
print(matrix)
sigma = np.std(matrix) #各列の分散を計算する
mean=np.mean(matrix) #各列の平均を計算する
print(sigma)
print(mean)
実行結果
root@2a1627805ea9:/home/sampletest# python3 sample.py
CLOSE OPEN HIGH LOW VOL
DATE
2020-01-21 22720 23140 23150 22710 4729711
2020-01-22 23050 22670 23080 22670 3345936
2020-01-23 22600 22690 22840 22570 5629196
#各列のshigma値を計算
CLOSE 190.262976
OPEN 216.999744
HIGH 132.748718
LOW 58.878406
VOL 939100.204300
dtype: float64
#各列の平均値を計算
CLOSE 2.279000e+04
OPEN 2.283333e+04
HIGH 2.302333e+04
LOW 2.265000e+04
VOL 4.568281e+06
dtype: float64
##4-2 各列のデータを正規化する。
正規化とは詳しくはこちら
今回の実施例は、scipy.stats.zscore()関数を使用している。平均0、分散1に正規化(標準化)する
import datetime
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import seaborn as sns
import io
import sys
import numpy as np
import scipy.stats
import pandas as pd
COLUMUNS=['A','B','C'] #描写するデータフレームの列名を与える
INDEX='DATE' #描写するデータフレームのindex値を与える。
#データフレームdf0を定義する
df0 = pd.DataFrame({'DATE': [1, 2, 3, 4],
'A': [12, -5, 3,6],
'B': [21, 17, 12,8],
'C': [6, -2, 0,9]
})
df0.set_index("DATE",inplace=True) #DATE列をindexに指定する
print(df0)
df1=seikika(df0,INDEX,COLUMUNS) #データフレームdf0を列ごとに正規化する。
print(df1)
#生データを正規化する
def seikika(matrix,INDEX,COLUMNS): #matrix:データセット, INDEX:matrixのindex値, COLUMNS:matrixの列名
z_matrix=scipy.stats.zscore(matrix) #各列においてデータを正規化する。リスト形式で返される
z_matrix=pd.DataFrame(z_matrix,columns=COLUMUNS) #リスト形式をデータフレーム形式に変換する。
matrix.reset_index(INDEX,inplace=True) #matrixのINDEX指定を解除
z_matrix=pd.concat([matrix[INDEX],z_matrix ],axis=1) #正規化データとINDEX値を結合する
z_matrix.set_index(INDEX,inplace=True) #INDEXを再びindex指定する
return z_matrix
実行結果
データ正規化処理前
A B C
DATE
1 12 21 6
2 -5 17 -2
3 3 12 0
4 6 8 9
データ正規化処理後
A B C
DATE
1 1.306395 1.319950 0.619780
2 -1.469694 0.507673 -1.183216
3 -0.163299 -0.507673 -0.732467
4 0.326599 -1.319950 1.295903
##4-3 各列のデータの重相関をとる。
import datetime
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import seaborn as sns
import pandas as pd
import numpy as np
# Dataセットを定義する。(日付はdatetime.datetimeで記載する。日付型で表記する)
dat = [
[datetime.datetime(2020,1,1),4,2],
[datetime.datetime(2020,1,2),7,5],
[datetime.datetime(2020,1,3),10,8],
[datetime.datetime(2020,1,4),13,10],
[datetime.datetime(2020,1,5),17,15],
[datetime.datetime(2020,1,6),12,10],
[datetime.datetime(2020,1,7),9,6],
[datetime.datetime(2020,1,8),7,4],
[datetime.datetime(2020,1,9),5,2],
[datetime.datetime(2020,1,10),3,1],
]
dat=pd.DataFrame(dat,columns=["DATE","Y","Z"]) #リスト型データをDataFrame型に入れる。
dat.set_index("DATE",inplace=True) #横軸に表示する日付をDataFrameのindexにする。
print(dat)
print("\n")
print("Y列とZ列のデータの重相関をとる")
np.corrcoef(dat['Y'],dat['Z'])
実行結果
Y Z
DATE
2020-01-01 4 2
2020-01-02 7 5
2020-01-03 10 8
2020-01-04 13 10
2020-01-05 17 15
2020-01-06 12 10
2020-01-07 9 6
2020-01-08 7 4
2020-01-09 5 2
2020-01-10 3 1
Y列とZ列のデータの重相関をとる
array([[1. , 0.99324975],
[0.99324975, 1. ]])
#5 配列データ処理
##5-1 特定列を抽出する
Indexを指定し、対象配列から特定業を抽出する
CSV_FILEPATH='test.csv'
matrix= pd.read_csv(CSV_FILEPATH)
print("matrix" + "\n")
print(matrix)
print("\n")
print("matrix1行目抽出"+ "\n")
print(len(matrix['CODE']))
print("\n")
print("matrix1行目EPS列の要素を抽出"+ "\n")
print(matrix.iloc[1]['EPS'])
実行結果
mtrix
EPS HAITOUB
CODE
2152 71.5 14.0
7752 85.6 26.0
3657 54.0 12.0
4238 89.0 20.0
mtrix_pj
EPS 71.5
HAITOUB 14.0
Name: 2152, dtype: float64
##5-2 行番号を指定して抽出する
下記のコードは対象の配列の1行目を抽出することを行っている
CSV_FILEPATH='test.csv'
matrix= pd.read_csv(CSV_FILEPATH, index_col=0)
print("matrix" + "\n")
print(matrix)
print("\n")
print("matrix1行目抽出"+ "\n")
print(matrix.iloc[1])
print("\n")
print("matrix1行目EPS列の要素を抽出"+ "\n")
print(matrix.iloc[1]['EPS'])
print("\n")
print("matrix3-4行目抽出"+ "\n")
print(matrix.iloc[2:4])
print("matrix12,4列目抽出"+ "\n")
print(matrix.iloc[:,[1,2,4]])
実行結果
matrix
EPS HAITOUBCODE
CODE
2152 71.5 14.0
7752 85.6 26.0
3657 54.0 12.0
4238 89.0 20.0
matrix1行目抽出
EPS 85.6
HAITOUBCODE 26.0
Name: 7752, dtype: float64
matrix1行目EPS列の要素を抽出
85.6
matrix3-4行目抽出
EPS HAITOUBCODE
CODE
3657 54.0 12.0
4238 89.0 20.0
##5-3 2つの行列を横方向に結合する。
import pandas as pd
import numpy as np
df0 = pd.DataFrame({'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]},
index=[1, 2, 3])
print(df0)
df1 = pd.DataFrame({'D': [10, 11, 12],
'E': [13, 14, 15]},
index=[1, 2, 4])
print(df1)
#行列df0とdf1を横方向に結合する(横方向結合 axis=1)
dfc=pd.concat([df0, df1],axis=1)
print(dfc)
実行結果
df0
A B C
1 1 4 7
2 2 5 8
3 3 6 9
df1
D E
1 10 13
2 11 14
4 12 15
df0とdf1の結合
A B C D E
1 1.0 4.0 7.0 10.0 13.0
2 2.0 5.0 8.0 11.0 14.0
3 3.0 6.0 9.0 NaN NaN
4 NaN NaN NaN 12.0 15.0
結合メモ
http://sinhrks.hatenablog.com/entry/2015/01/28/073327
##5-4 2つの行列を縦方向に結合する。
import pandas as pd
import numpy as np
df1 = pd.DataFrame({'D': [10, 11, 12],
'E': [13, 14, 15]},
index=[1, 2, 4])
df2= pd.DataFrame({'D': [0],
'E': [0]},
index=[5])
dfc=pd.concat([df1, df2])
実行結果
df1
D E
1 10 13
2 11 14
4 12 15
df2
D E
5 0 0
dfc
D E
1 10 13
2 11 14
4 12 15
5 0 0
##5-5 特定の行のみを1段下にシフトする。
import pandas as pd
import numpy as np
df1 = pd.DataFrame({'D': [10, 11, 12],
'E': [13, 14, 15]},
index=[1, 2, 4])
df2= pd.DataFrame({'D': [0],
'E': [0]},
index=[5])
#df1とdf2を縦に結合。つまり、最下位列にダミーを作る。
dfc=pd.concat([df1, df2])
#D行を一列下に移動する。+ E列と結合作業を行う
df3=pd.concat([dfc['D'].shift(1),dfc['E']],axis=1)
実行結果
df1
D E
1 10 13
2 11 14
4 12 15
df2
D E
5 0 0
dfc
D E
1 10 13
2 11 14
4 12 15
5 0 0
df3
D E
1 NaN 13
2 10.0 14
4 11.0 15
5 12.0 0
##5-6 列名を付与する
import pandas as pd
import numpy as np
df1 = pd.DataFrame({'D': [10, 11, 12],
'E': [13, 14, 15]},
index=[1, 2, 4])
print("df1")
print(df1)
#df1から'D'列を抽出する。ただし抽出後のデータdf2は列ラベル'D'がなくなる。
df2 = df1['D']
print("df2")
print(df2)
#列ラベル'D'を復活させる。
df3 = pd.DataFrame(df2,columns=['D'])
print("df3")
print(df3)
実行結果
df1
D E
1 10 13
2 11 14
4 12 15
df2
1 10
2 11
4 12
Name: D, dtype: int64
df3
D
1 10
2 11
4 12
##5-8 列または行データを削除する
import pandas as pd
import numpy as np
#一旦マトリックスを作成する。
df = pd.DataFrame({'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]},
index=['ONE', 'TWO', 'THREE'])
print(df)
df1=df.drop(columns='A') #列Aを削除する。
print("列Aを削除した")
print(df1)
df2=df.drop(index='ONE') #indexを指定して行を削除する。
print("indexを指定して行を削除した")
print(df2)
実行結果
A B C
ONE 1 4 7
TWO 2 5 8
THREE 3 6 9
列Aを削除した
B C
ONE 4 7
TWO 5 8
THREE 6 9
indexを指定して行を削除した
A B C
TWO 2 5 8
THREE 3 6 9
##5-9 条件に合うデータを抽出する。
import pandas as pd
#DataFrameを定義する。
df = pd.DataFrame(
{'ID':[1,2,3,],
'名前':['中村','井上','鈴木'],
'居住県':['東京','山口','大阪']
})
#'名前'列をIndexに指定する。
df.set_index("ID",inplace=True)
print("dfを表示する")
print(df)
print("DataFrame dfから名前が「井上」に一致する行のみを取り出す")
df0 = df[df.名前==str('井上')]
print(df0)
print("「井上」の居住県を取得する。")
print(df0.iloc[0][1])
print("DataFrame dfから名前が「井上」,「鈴木」に一致する行のみを取り出す")
names=['井上','鈴木']
#空のDataFrame df1を用意する。
df1 = pd.DataFrame(0,index=[],columns=['ID', '名前', '居住県'])
df1.set_index("ID",inplace=True)
for i,j in enumerate(names):
df1=pd.concat([df1, df[df.名前==str(j)]])
print(df1)
実行結果
(1)dfを表示する
名前 居住県
ID
1 中村 東京都
2 井上 山口県
3 鈴木 大阪府
(2)DataFrame dfから名前が「井上」に一致する行のみを取り出す。
→ DataFrame : df0に格納している。
名前 居住県
ID
2 井上 山口県
(3)「井上」の居住県を取得する。
山口県
(解説) DataFrame df0では、山口県は0行1列に存在しているため「df0.iloc[0][1]」と記述する。
DataFrame dfから名前が「井上」,「鈴木」に一致する行のみを取り出す
名前 居住県
ID
2 井上 山口
3 鈴木 大阪
##5-11 DataFrameのデータを昇順に並べる。
import numpy as np
import pandas as pd
dat = [
['2019-07-01',10],
['2019-07-02',2],
['2019-07-03',6],
['2019-07-04',8],
['2019-07-05',15],
['2019-07-08',7]
]
df0 = pd.DataFrame(dat,columns=["A","B"])
print("df0")
print(df0)
#B列をKeyにしてデータを昇順に並べる。
df1=df0.sort_values(by=["B"], ascending=True)
print("df1")
print(df1)
実行結果
df0
A B
0 2019-07-01 10
1 2019-07-02 2
2 2019-07-03 6
3 2019-07-04 8
4 2019-07-05 15
5 2019-07-08 7
df1
A B
1 2019-07-02 2
2 2019-07-03 6
5 2019-07-08 7
3 2019-07-04 8
0 2019-07-01 10
4 2019-07-05 15
##5-12 DataFrameのデータを行番号を指定して取り出す。
import numpy as np
import pandas as pd
dat = [
['2019-07-01',10],
['2019-07-02',2],
['2019-07-03',6],
['2019-07-04',8],
['2019-07-05',15],
['2019-07-08',7]
]
df0 = pd.DataFrame(dat,columns=["A","B"])
print("df0")
print(df0)
dataleng=df0["B"].count()
print("1行目(@B列)のデータを取得する")
print(df0["B"].iloc[0])
print("末行目(@B列)のデータを取得する")
print(df0["B"].iloc[dataleng-1])
実行結果
df0
A B
0 2019-07-01 10
1 2019-07-02 2
2 2019-07-03 6
3 2019-07-04 8
4 2019-07-05 15
5 2019-07-08 7
1行目(@B列)のデータを取得する
10
末行目(@B列)のデータを取得する
7
##5-13 1条件(if)に従い行データを生成する。
import numpy as np
import pandas as pd
#サンプルデータの定義
dat = [
['2019-07-01',10],
['2019-07-02',2],
['2019-07-03',6],
['2019-07-04',8],
['2019-07-05',15],
['2019-07-08',7]
]
df0 = pd.DataFrame(dat,columns=["A","B"])
#条件判定結果を格納する列"C"を用意する。
df0 = pd.DataFrame(df0,columns=["A","B","C"])
print(df0)
#条件判定関数を定義する。
def judge(x):
return 1 if x > 5 else 0
#B列の値>5であればC列は1を入力する。そうでなければC列は0にする。
df0['C'] = df0['B'].apply(judge)
print(df0)
実行結果
A B C
0 2019-07-01 10 NaN
1 2019-07-02 2 NaN
2 2019-07-03 6 NaN
3 2019-07-04 8 NaN
4 2019-07-05 15 NaN
5 2019-07-08 7 NaN
B列の値>5であればC列は1を入力する。そうでなければC列は0にする。
A B C
0 2019-07-01 10 1
1 2019-07-02 2 0
2 2019-07-03 6 1
3 2019-07-04 8 1
4 2019-07-05 15 1
5 2019-07-08 7 1
##5-14 複数列データを比較し、比較結果により行データを生成する。
import numpy as np
import pandas as pd
#サンプルデータの定義
dat = [
[1,10],
[4,2],
[7,6],
[4,8],
[20,15],
[3,7]
]
df0 = pd.DataFrame(dat,columns=["A","B"])
#条件判定結果を格納する列"C"を用意する。
df0 = pd.DataFrame(df0,columns=["A","B","C"])
print(df0)
#条件判定関数を定義する。
def judge(x):
return 1 if x.A > x.B else 0
#B列の値>5であればC列は1を入力する。そうでなければC列は0にする。
df0['C'] = df0.apply(lambda x:judge(x),axis=1)
print("(A列データ)>(B列データ)あればC列は1を入力する。そうでなければC列は0にする。")
print(df0)
実行結果
A B C
0 1 10 NaN
1 4 2 NaN
2 7 6 NaN
3 4 8 NaN
4 20 15 NaN
5 3 7 NaN
(A列データ)>(B列データ)あればC列は1を入力する。そうでなければC列は0にする。
A B C
0 1 10 0
1 4 2 1
2 7 6 1
3 4 8 0
4 20 15 1
5 3 7 0
##5-15 3次元DataFrameを扱う(Panel)
##5-16 辞書型配列に順番を持たせる(OrderedDict)
##5-17 DataFrameのIndex名と列名を変更する。
import pandas as pd
import numpy as np
dat = [
['2019-07-01','9997','740'],
['2019-07-02','9997','749'],
['2019-07-03','9997','757'],
['2019-07-04','9997','769'],
['2019-07-05','9997','762'],
['2019-07-08','9997','760']
]
df4 = pd.DataFrame(dat,columns=["DATE","B","C"]) #各列に対して、列名を与えている。
df4.set_index("DATE",inplace=True) #DATE列をindexに指定する。
print("変更前")
print(df4)
df4.reset_index("DATE",inplace=True) #DATE列のindexを解除する。
df4= df4.rename(columns={'DATE': 'Date','B': 'B1', 'C': 'C1'})#各列名を所望の列名に変更する。
df4.set_index("Date",inplace=True)
print("変更後")
print(df4)
実行結果
変更前
B C
DATE
2019-07-01 9997 740
2019-07-02 9997 749
2019-07-03 9997 757
2019-07-04 9997 769
2019-07-05 9997 762
2019-07-08 9997 760
変更後
B1 C1
Date
2019-07-01 9997 740
2019-07-02 9997 749
2019-07-03 9997 757
2019-07-04 9997 769
2019-07-05 9997 762
2019-07-08 9997 760
##5-18 DataFrameの列を入れ替える
import numpy as np
import pandas as pd
dat = [
['2019-07-01',10,-2],
['2019-07-02',2,-5],
['2019-07-03',6,-10],
['2019-07-04',8,-8],
['2019-07-05',15,-6],
['2019-07-08',7,-8]
]
df0 = pd.DataFrame(dat,columns=["A","B","C"])
print("df0")
print(df0)
#列Bと列Cを入れ替える。
df0 = df0[['A','C','B']]
print("df0")
print(df0)
実行結果
df0
A B C
0 2019-07-01 10 -2
1 2019-07-02 2 -5
2 2019-07-03 6 -10
3 2019-07-04 8 -8
4 2019-07-05 15 -6
5 2019-07-08 7 -8
df0 #列Bと列Cを入れ替える。
A C B
0 2019-07-01 -2 10
1 2019-07-02 -5 2
2 2019-07-03 -10 6
3 2019-07-04 -8 8
4 2019-07-05 -6 15
5 2019-07-08 -8 7
##5-19 DataFrameの任意の列を取り出す。
import pandas as pd
import numpy as np
dat = [
['2019-07-01','9997','740'],
['2019-07-02','9997','749'],
['2019-07-03','9997','757'],
['2019-07-04','9997','769'],
['2019-07-05','9997','762'],
['2019-07-08','9997','760']
]
df4 = pd.DataFrame(dat,columns=["DATE","B","C"]) #各列に対して、列名を与えている。
print(df4)
df=df4.loc[:,['B','C']]
print(df)
実行結果
df4
DATE B C
0 2019-07-01 9997 740
1 2019-07-02 9997 749
2 2019-07-03 9997 757
3 2019-07-04 9997 769
4 2019-07-05 9997 762
5 2019-07-08 9997 760
df(データフレームdf4から B列とC列を取り出す)
B C
0 9997 740
1 9997 749
2 9997 757
3 9997 769
4 9997 762
5 9997 760
##5-20 DataFrameをArrayにする。
import pandas as pd
import numpy as np
#一旦マトリックスを作成する。
df = pd.DataFrame({'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]},
index=['ONE', 'TWO', 'THREE'])
print("df")
print(df)
print("df.values")
df.values
実行結果
****df*****
A B C
ONE 1 4 7
TWO 2 5 8
THREE 3 6 9
****df.values*****
array([[1, 4, 7],
[2, 5, 8],
[3, 6, 9]], dtype=int64)
##5-21 List型のプロパティーと要素を取得する
d = {'英語': 59, '数学': 76, '国語': 43}
print(d.values()) # dict_values([59, 76, 43])
print(d.keys()) # dict_keys(['英語', '数学', '国語'])
##5-22 Indexをキーにして2つのデータフレームを結合する。
重複したIndexは上書きする。
import pandas as pd
import numpy as np
dat = [
['2019-07-01','9997','740'],
['2019-07-02','9997','749'],
['2019-07-03','9997','757'],
['2019-07-04','9997','769'],
['2019-07-05','9997','762'],
['2019-07-08','9997','760']
]
df0 = pd.DataFrame(dat,columns=["A","B","C"])
print(df0)
dat1 = [
['2019-07-02','9997','749'],
['2019-07-03','9997','757'],
['2019-07-04','9997','769'],
['2019-07-05','9997','762'],
['2019-07-08','9997','760'],
['2019-07-09','12','765'],
['2019-07-10','34','769']
]
df1 = pd.DataFrame(dat1,columns=["A","B","C"])
print(df1)
df2=pd.merge(df0, df1, how="outer")
df2.set_index("A",inplace=True)
print(df2)
### df0 #####
A B C
0 2019-07-01 9997 740
1 2019-07-02 9997 749
2 2019-07-03 9997 757
3 2019-07-04 9997 769
4 2019-07-05 9997 762
5 2019-07-08 9997 760
#### df1 ############
A B C
0 2019-07-02 9997 749
1 2019-07-03 9997 757
2 2019-07-04 9997 769
3 2019-07-05 9997 762
4 2019-07-08 9997 760
5 2019-07-09 12 765
6 2019-07-10 34 769
#### df2 ############
B C
A
2019-07-01 9997 740
2019-07-02 9997 749
2019-07-03 9997 757
2019-07-04 9997 769
2019-07-05 9997 762
2019-07-08 9997 760
2019-07-09 12 765
2019-07-10 34 769
##5-23 numpy.ndarray型の特定の要素の個数をカウントする
import numpy as np
a = np.arange(12).reshape((3, 4))
type(a)
print(a)
print(a)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
type(a)
<class 'numpy.ndarray'>
print(np.count_nonzero(a < 4))
4
##5-24 iterrows() : インデックス名(行名)とその行のデータを取り出す
1行ずつ、インデックス名(行名)とその行のデータ(pandas.Series型)のタプル(index, Series)を取得できる。
import numpy as np
import pandas as pd
dat = [
['2019-07-01',10,-2],
['2019-07-02',2,-5],
['2019-07-03',6,-10],
['2019-07-04',8,-8],
['2019-07-05',15,-6],
['2019-07-08',7,-8]
]
df = pd.DataFrame(dat,columns=["A","B","C"])
df.set_index("A",inplace=True)
print(df)
print('\n','how to ues iteerrows','\n')
for index, item in df.iterrows():
print('index:',index)
print('item:','\n',item)
B C
A
2019-07-01 10 -2
2019-07-02 2 -5
2019-07-03 6 -10
2019-07-04 8 -8
2019-07-05 15 -6
2019-07-08 7 -8
how to ues iteerrows
index: 2019-07-01
item:
B 10
C -2
Name: 2019-07-01, dtype: int64
index: 2019-07-02
item:
B 2
C -5
Name: 2019-07-02, dtype: int64
index: 2019-07-03
item:
B 6
C -10
Name: 2019-07-03, dtype: int64
index: 2019-07-04
item:
B 8
C -8
Name: 2019-07-04, dtype: int64
index: 2019-07-05
item:
B 15
C -6
Name: 2019-07-05, dtype: int64
index: 2019-07-08
item:
B 7
C -8
Name: 2019-07-08, dtype: int64