質問編集履歴
3
パスを消しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -60,22 +60,6 @@
|
|
60
60
|
df = pd.read_csv('\indicator_single.csv',dtype={'証券コード':str},encoding="cp932")
|
61
61
|
df["証券コード"] = df["証券コード"].str[0:4]
|
62
62
|
|
63
|
-
df_only_current = df.from math import nan
|
64
|
-
import os
|
65
|
-
import pandas as pd
|
66
|
-
import numpy as np
|
67
|
-
import const #const.py
|
68
|
-
|
69
|
-
const.FOLDER_CURRENT = os.path.dirname(os.path.abspath(__file__))
|
70
|
-
const.FOLDER_EDINET = os.path.join(const.FOLDER_CURRENT,'data')
|
71
|
-
const.FILE_EDINET_CSV = os.path.join(const.FOLDER_EDINET,'result/indicator_multiple.csv')
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
def make_indicator_multiple():
|
76
|
-
df = pd.read_csv('C:\xampp\htdocs\01_AppDev\01_StockManagementApp\data\result\indicator_single.csv',dtype={'証券コード':str},encoding="cp932")
|
77
|
-
df["証券コード"] = df["証券コード"].str[0:4]
|
78
|
-
|
79
63
|
df_only_current = df.groupby('証券コード').max('年度')
|
80
64
|
df['n年前'] = df.groupby('証券コード')['年度'].transform('max')-df['年度']
|
81
65
|
|
@@ -91,44 +75,12 @@
|
|
91
75
|
|
92
76
|
def file_merge(df_edinet):
|
93
77
|
columns =['日付','証券コード','区分','銘柄名','始値','高値','安値','終値','取引市場']
|
94
|
-
df_stockprice = pd.read_csv('C:\xampp\htdocs\01_AppDev\01_StockManagementApp\data\result\stock_price.csv',names=columns,encoding="cp932")
|
95
|
-
print(df_edinet)
|
96
|
-
print(df_stockprice)
|
97
|
-
join_data = pd.merge(df_edinet,df_stockprice,on='証券コード',how='left')
|
98
|
-
|
99
|
-
print(join_data)
|
100
|
-
#join_data.to_csv('C:\xampp\htdocs\01_AppDev\01_StockManagementApp\data\result\test.csv',encoding='cp932',index=False)
|
101
|
-
|
102
|
-
def main():
|
103
|
-
df_edinet = make_indicator_multiple()
|
104
|
-
file_merge(df_edinet)
|
105
|
-
|
106
|
-
print("finish")
|
107
|
-
|
108
|
-
if __name__ == "__main__":
|
109
|
-
main()
|
110
|
-
groupby('証券コード').max('年度')
|
111
|
-
df['n年前'] = df.groupby('証券コード')['年度'].transform('max')-df['年度']
|
112
|
-
|
113
|
-
#追加する列名一覧
|
114
|
-
add_columns = ['純資産額','売上高','当期純利益','営業CF','EPS']
|
115
|
-
|
116
|
-
for column in add_columns:
|
117
|
-
for i in range(0,4):
|
118
|
-
j = i+1
|
119
|
-
df_pvt=df.pivot(index='証券コード',columns='n年前',values=column)
|
120
|
-
df_only_current[f"{column}_{i}→{j}"] = (df_pvt[i]-df_pvt[j])/df_pvt[j]
|
121
|
-
return df_only_current
|
122
|
-
|
123
|
-
def file_merge(df_edinet):
|
124
|
-
columns =['日付','区分','証券コード','銘柄名','始値','高値','安値','終値','取引市場']
|
125
78
|
df_stockprice = pd.read_csv('\stock_price.csv',names=columns,encoding="cp932")
|
126
79
|
print(df_edinet)
|
127
80
|
print(df_stockprice)
|
128
|
-
join_data = pd.
|
81
|
+
join_data = pd.concat([df_edinet,df_stockprice],join='証券コード')
|
129
82
|
|
130
83
|
print(join_data)
|
131
|
-
join_data.to_csv('\test.csv',encoding='cp932',index=False)
|
132
84
|
|
133
85
|
def main():
|
134
86
|
df_edinet = make_indicator_multiple()
|
@@ -138,7 +90,6 @@
|
|
138
90
|
|
139
91
|
if __name__ == "__main__":
|
140
92
|
main()
|
141
|
-
|
142
93
|
```
|
143
94
|
|
144
95
|
#得られたエラーメッセージ
|
2
自身で挑戦した経緯を追加しました。
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
|
1
|
+
pivotしたdataframeとpivotしていないdataframeを結合したい。
|
body
CHANGED
@@ -1,14 +1,18 @@
|
|
1
|
-
<
|
1
|
+
<お知らせ>
|
2
|
-
|
2
|
+
少し前に自身でもう少し頑張ってみますとしていましたが、エラー②までいって行き詰りました。
|
3
|
-
|
3
|
+
どなたかご助言いただけますと大変助かります。
|
4
|
+
============================================
|
4
5
|
|
5
6
|
#実現したいこと。
|
6
7
|
Pythonでデータの整形を試みている中で、pivotしたdataframeとpivotしていないdataframeを結合(merge)したいです。
|
7
8
|
|
8
9
|
以下のような対象データ1のpivot後のデータと、対象データ2をmergeしたいのですがうまくいきません。
|
9
|
-
もしよろしければ、解決方法をご教示ください。
|
10
10
|
|
11
|
+
原因はpivotしていないデータの型と、pivotしたデータの型が違うためのようですが、解決策が浮かびません。
|
11
12
|
|
13
|
+
pivotする前に結合してしまう方法があるとは思うのですが、少しきれいじゃないように思うので、可能であればpivot後に結合したいと考えています。
|
14
|
+
|
15
|
+
|
12
16
|
◆対象データ1
|
13
17
|
pivot したデータは有価証券報告書を加工して得た以下のようなCSVをdataframeに入れて。
|
14
18
|
|
@@ -56,6 +60,22 @@
|
|
56
60
|
df = pd.read_csv('\indicator_single.csv',dtype={'証券コード':str},encoding="cp932")
|
57
61
|
df["証券コード"] = df["証券コード"].str[0:4]
|
58
62
|
|
63
|
+
df_only_current = df.from math import nan
|
64
|
+
import os
|
65
|
+
import pandas as pd
|
66
|
+
import numpy as np
|
67
|
+
import const #const.py
|
68
|
+
|
69
|
+
const.FOLDER_CURRENT = os.path.dirname(os.path.abspath(__file__))
|
70
|
+
const.FOLDER_EDINET = os.path.join(const.FOLDER_CURRENT,'data')
|
71
|
+
const.FILE_EDINET_CSV = os.path.join(const.FOLDER_EDINET,'result/indicator_multiple.csv')
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
def make_indicator_multiple():
|
76
|
+
df = pd.read_csv('C:\xampp\htdocs\01_AppDev\01_StockManagementApp\data\result\indicator_single.csv',dtype={'証券コード':str},encoding="cp932")
|
77
|
+
df["証券コード"] = df["証券コード"].str[0:4]
|
78
|
+
|
59
79
|
df_only_current = df.groupby('証券コード').max('年度')
|
60
80
|
df['n年前'] = df.groupby('証券コード')['年度'].transform('max')-df['年度']
|
61
81
|
|
@@ -70,6 +90,37 @@
|
|
70
90
|
return df_only_current
|
71
91
|
|
72
92
|
def file_merge(df_edinet):
|
93
|
+
columns =['日付','証券コード','区分','銘柄名','始値','高値','安値','終値','取引市場']
|
94
|
+
df_stockprice = pd.read_csv('C:\xampp\htdocs\01_AppDev\01_StockManagementApp\data\result\stock_price.csv',names=columns,encoding="cp932")
|
95
|
+
print(df_edinet)
|
96
|
+
print(df_stockprice)
|
97
|
+
join_data = pd.merge(df_edinet,df_stockprice,on='証券コード',how='left')
|
98
|
+
|
99
|
+
print(join_data)
|
100
|
+
#join_data.to_csv('C:\xampp\htdocs\01_AppDev\01_StockManagementApp\data\result\test.csv',encoding='cp932',index=False)
|
101
|
+
|
102
|
+
def main():
|
103
|
+
df_edinet = make_indicator_multiple()
|
104
|
+
file_merge(df_edinet)
|
105
|
+
|
106
|
+
print("finish")
|
107
|
+
|
108
|
+
if __name__ == "__main__":
|
109
|
+
main()
|
110
|
+
groupby('証券コード').max('年度')
|
111
|
+
df['n年前'] = df.groupby('証券コード')['年度'].transform('max')-df['年度']
|
112
|
+
|
113
|
+
#追加する列名一覧
|
114
|
+
add_columns = ['純資産額','売上高','当期純利益','営業CF','EPS']
|
115
|
+
|
116
|
+
for column in add_columns:
|
117
|
+
for i in range(0,4):
|
118
|
+
j = i+1
|
119
|
+
df_pvt=df.pivot(index='証券コード',columns='n年前',values=column)
|
120
|
+
df_only_current[f"{column}_{i}→{j}"] = (df_pvt[i]-df_pvt[j])/df_pvt[j]
|
121
|
+
return df_only_current
|
122
|
+
|
123
|
+
def file_merge(df_edinet):
|
73
124
|
columns =['日付','区分','証券コード','銘柄名','始値','高値','安値','終値','取引市場']
|
74
125
|
df_stockprice = pd.read_csv('\stock_price.csv',names=columns,encoding="cp932")
|
75
126
|
print(df_edinet)
|
@@ -90,33 +141,21 @@
|
|
90
141
|
|
91
142
|
```
|
92
143
|
|
93
|
-
#得られ
|
144
|
+
#得られたエラーメッセージ
|
94
|
-
|
145
|
+
ValueError: You are trying to merge on object and int64 columns. If you wish to proceed you should use pd.concat
|
95
146
|
|
147
|
+
#エラーを受けて試したコード①
|
96
|
-
|
148
|
+
mergeからconcatに変えてみる。
|
149
|
+
```Python
|
97
|
-
|
150
|
+
join_data = pd.concat(df_edinet,df_stockprice)
|
98
|
-
|
151
|
+
```
|
99
|
-
9702 1309.81 124.04 NaN 0.712 0.129 26.4 1717 5669000 ... 0.382676 0.165805 2.979031 -0.159800 -0.241374 0.158062 0.777464 0.757364
|
100
152
|
|
101
|
-
|
153
|
+
#試したコードのエラー①
|
102
|
-
日付 区分 証券コード 銘柄名 始値 高値 安値 終値 取引市場
|
103
|
-
2021/10/8 1001 11 1001 日経225 28031.0 28321.0 28018.0 28049.0 1356770000 東証1部
|
104
|
-
2021/10/8 1002 11 1002 TOPIX 1964.0 1978.0 1961.0 1961.0 1356770000 東証1部
|
105
|
-
|
154
|
+
TypeError: first argument must be an iterable of pandas objects, you passed an object of type "DataFrame"
|
106
|
-
2021/10/8 1305 11 1305 ダイワTPX 2069.0 2082.0 2063.0 2063.0 127680 東証1部
|
107
|
-
2021/10/8 1306 11 1306 TOPIX投 2046.0 2058.0 2039.0 2041.0 2852540 東証1部
|
108
|
-
... ... .. ... ... ... ... ... ... ...
|
109
|
-
2021/10/8 9993 11 9993 ヤマザワ 1730.0 1730.0 1712.0 1719.0 3700 東証1部
|
110
|
-
2021/10/8 9994 11 9994 やまや 2415.0 2421.0 2399.0 2415.0 5900 東証1部
|
111
|
-
2021/10/8 9995 11 9995 グローセル 409.0 409.0 404.0 406.0 39000 東証1部
|
112
|
-
2021/10/8 9996 91 9996 サトー商会 1502.0 1505.0 1500.0 1505.0 900 JAQ
|
113
|
-
2021/10/8 9997 11 9997 ベルーナ 827.0 835.0 824.0 824.0 152900 東証1部
|
114
155
|
|
115
|
-
[4358 rows x 9 columns]
|
116
|
-
証券コード BPS EPS EPS_調整後 自己資本比率 ROE PER 従業員数 発行済株式総数 現金及び預金 ... EPS_2→3 EPS_3→4 日付 区分 銘柄名
|
117
|
-
|
156
|
+
#エラーを受けて試したコード②
|
118
|
-
0 7516 4104.73 561.27 561.11 0.357 0.145 12.2 4037 34682113 14681000000 ... 0.082087 0.660540 NaN NaN NaN NaN NaN NaN NaN NaN
|
119
|
-
1 9702 1309.81 124.04 NaN 0.712 0.129 26.4 1717 5669000 5199102000 ... 0.777464 0.757364 NaN NaN NaN NaN NaN NaN NaN NaN
|
120
|
-
|
121
|
-
[2 rows x 97 columns]
|
122
|
-
|
157
|
+
```Python
|
158
|
+
join_data = pd.concat([df_edinet,df_stockprice],join='証券コード')
|
159
|
+
```
|
160
|
+
#試したコードのエラー②
|
161
|
+
Only can inner (intersect) or outer (union) join the other axis
|
1
元のコードに決定的な誤りがあったため
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
pivotしたdataframeとpivotしていないdataframeを結合したい。
|
1
|
+
【自身で再検証します。】pivotしたdataframeとpivotしていないdataframeを結合したい。
|
body
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
<追記お知らせ>
|
2
|
+
本件について、対象データ2の列名の順序が違ったことが発覚しました。
|
3
|
+
自身で再検証してまた躓いたら、再度ご助言を依頼します。
|
4
|
+
|
1
5
|
#実現したいこと。
|
2
6
|
Pythonでデータの整形を試みている中で、pivotしたdataframeとpivotしていないdataframeを結合(merge)したいです。
|
3
7
|
|