如何在函数内部附加到DataFrame并在函数外部返回更改

问题描述

我有一个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 (将#修改为@)