Avatar billede molehonter Mester
09. marts 2023 - 12:51 Der er 5 kommentarer og
1 løsning

string indices must be integers yahoo finance

Jeg får en fejl på dette kode, bruger visual studio

def get(tickers, startdate, enddate):
    def data(ticker):
        return(pdr.get_data_yahoo(ticker, start=startdate, end=enddate))
    datas=map(data,tickers)
    return(pd.concat(datas,keys=tickers,names=['Ticker','Date']))

all_data=get(tickers, datetime.datetime(2023,1,1), datetime.datetime(2023,1,31))

Denne del giver return(pdr.get_data_yahoo(ticker, start=startdate, end=enddate)) denne fejl string indices must be integers, jeg ved det er en kendt problem.

Følgende output
string indices must be integers
Stack trace:
>  File "C:\Users\peter\OneDrive\Investering\RequestStockData\RequestStockData\RequestStockData.py", line 23, in data (Current frame)
>    return(pdr.get_data_yahoo(ticker, start=startdate, end=enddate))
>  File "C:\Users\peter\OneDrive\Investering\RequestStockData\RequestStockData\RequestStockData.py", line 25, in get
>    return(pd.concat(datas,keys=tickers,names=['Ticker','Date']))
>  File "C:\Users\peter\OneDrive\Investering\RequestStockData\RequestStockData\RequestStockData.py", line 27, in <module>
>    all_data=get(tickers, datetime.datetime(2023,1,1), datetime.datetime(2023,1,31))
Loaded 'pandas_datareader.yahoo.daily'
Loaded 'pandas_datareader.base'
Loaded 'pandas_datareader.data'
Loaded '__main__'
Loaded 'pandas.core.reshape.concat'
Loaded 'pandas.util._decorators'
Loaded 'runpy'
The program 'python.exe' has exited with code -1 (0xffffffff)..:
Avatar billede Slettet bruger
09. marts 2023 - 13:51 #1
Det ser ud til, at fejlen skyldes brug af en streng som indeks i stedet for et heltal. Dette kan skyldes, at "ticker" parameteren ikke er et heltal, men i stedet en streng. Det kan også skyldes en fejl i biblioteket, som du bruger til at hente data.

For at bekræfte, at "ticker" parameteren er en streng, kan du tilføje en print-sætning i data-funktionen for at udskrive værdien af "ticker":

def data(ticker):
    print(ticker)
    return(pdr.get_data_yahoo(ticker, start=startdate, end=enddate))


Hvis det viser sig, at "ticker" er en streng, kan du muligvis løse problemet ved at konvertere det til et heltal ved hjælp af int() -funktionen.

Hvis problemet stadigvæk er til stede, kan det være en fejl i biblioteket, som du bruger. Du kan prøve at opdatere biblioteket til den nyeste version eller kontakte bibliotekets udviklere for at rapportere problemet.
Avatar billede Slettet bruger
09. marts 2023 - 13:54 #2
Held og lykke med den.

Jeg hopper af her 👍
Avatar billede arne_v Ekspert
09. marts 2023 - 14:57 #3
Avatar billede arne_v Ekspert
09. marts 2023 - 14:58 #4
#1

Ticker skal vel være tekst??
Avatar billede molehonter Mester
09. marts 2023 - 14:59 #5
Jeg prøver det af, ticker er en streng.
Avatar billede molehonter Mester
10. marts 2023 - 12:02 #6
Jeg tjekkede igennem, der er nok noget gal med pandas installation. Jeg har lavet en lidt anden løsning som virker. Skal lige finpudses lidt, jeg prøvede ChatGPT efter et par forsøg ramte den rigtigt.

import pyodbc
import yfinance as yf

# Connect to the Access database
conn_str = (
    r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
    r'DBQ=C:\Users\peter\OneDrive\Investering\Aktiver_Etoro.accdb;'
)
cnxn = pyodbc.connect(conn_str)

# Query the database to retrieve stock data
cursor = cnxn.cursor()
cursor.execute("SELECT Aktiv.Aktiv_NicNavn FROM Aktiv WHERE Aktiv.Aktiv_RequstStockData=True")
tickers = [row[0] for row in cursor.fetchall()]

# Get market data from Yahoo Finance for each ticker
for ticker in tickers:
    MarkedsData = yf.Ticker(ticker)
    df = MarkedsData.history(interval='1h', period='1d')
    df['NickName'] = ticker
    df['Change'] = df['Open'] - df['Close']
    df['Pct_Chg'] = df['Change'] / df['Open']

    # Add the market data to the Access database
   
    for index, row in df.iterrows():
        print(row['NickName'], row['Open'], row['Pct_Chg'] )
        cursor.execute("""
            INSERT INTO market_data (ticker, date_, open, high, low, close, volume, nickname, change, pct_chg)
            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
        """, ticker, index, row['Open'], row['High'], row['Low'], row['Close'], row['Volume'], row['NickName'], row['Change'], row['Pct_Chg'])
    cnxn.commit()

# Close the database connection
cnxn.close()

print(df)
print(tickers)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester