问题描述
我有一个python脚本,用于创建DataFrame df,连接到API并在函数中将数据附加到DataFrame。 但是,数据框在函数外部为空。
该函数为“ get_stock_price(客户,股票行情,option_dates,df)” 我已经缩短了代码,以显示尝试添加到df的部分。
#rewrite with one reqMktData and tickType only
from datetime import datetime
from threading import Thread
import time
from ibapi.client import EClient,Contract
from ibapi.wrapper import EWrapper
from ibapi.utils import iswrapper
import math
import pandas as pd
import numpy as np
df = pd.DataFrame([],columns=['Underlying','Expiry','Strike','Right'])
class TestApp(EWrapper,EClient):
def __init__(self,addr,port,client_id):
EWrapper.__init__(self)
EClient. __init__(self,self)
# Initialize variables
# Connect to TWS API
#--functions that connect to API to get data---
def get_stock_price(client,ticker,option_dates,df):
#set contract and call API functions
#get strikes between q_up and q_down,append to df?
for x in range(len(option_dates)):
for strike in client.strikes:
if strike > q_down[x] and strike < q_up[x]:
df=df.append({
'Underlying': ticker,'Expiry': option_dates[x],'Strike': strike,'Right' : 'C',},ignore_index=True)
return df
df=df.reindex(df.index.repeat(2))
df=df.reset_index(drop=True)
print(df)
df['Underlying']='test'
return(df)
def main():
client = TestApp('127.0.0.1',7497,126)
ticker = 'AMD'
option_dates = ['20200821','20200918','20201016']
get_stock_price(client,df)
client.done=True
client.disconnect()
print('try df again')
print(df)
if __name__ == "__main__":
main()
通过阅读我尝试添加的其他question的答案
return df
追加之后,也尝试过:
return df.append({
'Underlying': ticker,ignore_index=True)
并作为测试:
df['Underlying']='test'
return(df)
这些似乎都不起作用,当我在main()函数末尾打印(df)时,它是空的。
这是输出:
...
288 AMD 20201016 108.0 P
289 AMD 20201016 108.0 C
290 AMD 20201016 109.0 P
291 AMD 20201016 109.0 C
[292 rows x 4 columns]
try printing df again
Empty DataFrame
Columns: [Underlying,Expiry,Strike,Right]
Index: []
...
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)