[英]iterating through rows and columns of stock price python
我下面有一個代碼
result, diff = [], []
for index, row in final.iterrows():
for column in final.columns:
if ((final['close'] - final['open']) > 20):
diff = final['close'] - final['open']
result = 1
elif ((final['close'] - final['open']) < -20):
diff = final['close'] - final['open']
result = -1
elif (-20 < (final['close'] - final['open']) < 20 ):
diff = final['close'] - final['open']
result = 0
else:
continue
目的是針對每個時間戳,檢查收盤價-開盤價是否大於20點,然后為其分配買入價。 如果小於-20,則分配一個賣出價格;如果介於兩者之間,則分配一個0。
我收到此錯誤
The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
[Finished in 35.418s
曾經對pandas
有經驗的人會給出更好的答案,但由於沒人在這里回答我的問題。 您通常不希望直接使用pandas.Dataframes
進行迭代,因為這樣做會達到目的。 pandas
解決方案看起來更像是:
import pandas as pd
data = {
'symbol': ['WZO', 'FDL', 'KXW', 'GYU', 'MIR', 'YAC', 'CDE', 'DSD', 'PAM', 'BQE'],
'open': [356, 467, 462, 289, 507, 654, 568, 646, 440, 625],
'close': [399, 497, 434, 345, 503, 665, 559, 702, 488, 608]
}
df = pd.DataFrame.from_dict(data)
df['diff'] = df['close'] - df['open']
df.loc[(df['diff'] < 20) & (df['diff'] > -20), 'result'] = 0
df.loc[df['diff'] >= 20, 'result'] = 1
df.loc[df['diff'] <= -20, 'result'] = -1
df
現在包含:
symbol open close diff result
0 WZO 356 399 43 1.0
1 FDL 467 497 30 1.0
2 KXW 462 434 -28 -1.0
3 GYU 289 345 56 1.0
4 MIR 507 503 -4 0.0
5 YAC 654 665 11 0.0
6 CDE 568 559 -9 0.0
7 DSD 646 702 56 1.0
8 PAM 440 488 48 1.0
9 BQE 625 608 -17 0.0
關於您的代碼,我將從上面重復我的評論:您正在按row
進行迭代,然后在您的條件下使用整個DataFrame final
。 我想你打算在那里row
。 您無需遍歷按索引獲取值的列。 當final['close'] - final['open']
正好為20時,您的條件會丟失。 result, diff = [], []
是頂部列表,但隨后在循環中分配為整數。 也許您想要result.append()
?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.