SBI証券で複数の指標で情報を個別にcsv出力して、指標の列をまるっとコピーして
ひとまとめにしようとすると指標によって含まれる会社が変わってしまうため、
単純にはできません。
ですので、会社名を判別しながら指標を追加し、会社名がなければ会社の行を追加して
指標を追加するというプログラムを作成しましたの紹介します。
SBI証券からcsvファイルは出力済みでpandasで読み込んでいることが前提です。
【Python】pandasでcsvファイルを読み込む
# 1つにまとめるDataFrameを作成する
# DataFrameのcolumnをlistにする
cols = ['銘柄名', '市場', '現在値', '時価総額(百万円)', '配当利回り(%)',
'PBR(株価純資産倍率)(倍)', 'PER(株価収益率)(倍)', '自己資本比率(%)']
# SBI証券から出力したcsvを読み込んでいるDataFrameをlistにする
df_list = [jika, haitou, pbr, per, jikoshihon]
# まとめる用のDataFrameを作成
data = pd.DataFrame(columns=cols, index=jika.index)
# 1つ目のDataFrameはそのままデータを入れる
for code in df_list[0].index:
data.loc[code, '銘柄名'] = df_list[0].loc[code, '銘柄名']
data.loc[code, '市場'] = df_list[0].loc[code, '市場']
data.loc[code, '現在値'] = df_list[0].loc[code, '現在値']
data.loc[code, '時価総額(百万円)'] = df_list[0].loc[code, '時価総額(百万円)']
# 2つ目以降は証券コードから判別して動作を変える
for i in range(1, len(df_list)):
for code in df_list[i].index:
if code in data.index:
data.loc[code, cols[i+3]] = df_list[i].loc[code, cols[i+3]]
else:
data.loc[code, '銘柄名'] = df_list[i].loc[code, '銘柄名']
data.loc[code, '市場'] = df_list[i].loc[code, '市場']
data.loc[code, '現在値'] = df_list[i].loc[code, '現在値']
data.loc[code, cols[i+3]] = df_list[i].loc[code, cols[i+3]]
1つ目のDataFrameはそのままデータを入れます。
2つ目以降は証券コードの有無に応じてプログラムを変えていきます。含まれる場合、そのまま指標の列にデータを格納していきます。
含まれない場合、銘柄名や市場、現在値など基本的情報を新たに入力し、指標も入れていきます。
証券コードに応じて情報がないものは空欄のまま一覧にできるので行き帰りの電車の中で銘柄を探しています。