2016-04-17 5 views
1

Imports Module anschließen:Es kann keine Datenrahmen auch nach folgenden wird ein Beispiel

import Quandl 
import pandas as pd 
from pandas.tools.plotting import df_unique 

Lese api-Schlüssel:

api_key = open('quandlapikey.txt','r').read() 

Derzeit ist die Funktion liest eine CSV-Datei, die Codes zu bekommen aber ich ändern planen dies zu sqllite ..

def stock_list(): 
    #stocks = pd.read_csv('TID.csv'.rstrip()) 
    stocks = open('TID.csv').readlines() 

    return stocks[0:] 

Erhalten Sie Lagercodes von quandl das funktioniert ein Vergnügen.

Diese Anweisung verursacht die Probleme aus irgendeinem Grund, während der Schleife keine zusätzlichen Aktienkurse hinzugefügt werden können.

Dies ist die Ausgabe von den Print-Anweisungen und Fehler von der Join.

Result: 

LSE/VOD 
Date 
2016-04-14 226.80 
2016-04-15 229.75 

<ETC for all stocks> 

Traceback (most recent call last): 
    File "H:\Workarea\DataB\SkyDriveP\OneDrive\PyProjects\Learning\21 myPprojects\stockPrices.py", line 49, in <module> 
    getStockValues() 
    File "H:\Workarea\DataB\SkyDriveP\OneDrive\PyProjects\Learning\21 myPprojects\stockPrices.py", line 43, in getStockValues 
    main_df = main_df.join(df) 
    File "H:\APPS\Python35-32\lib\site-packages\pandas\core\generic.py", line 2669, in __getattr__ 
    return object.__getattribute__(self, name) 
AttributeError: 'Series' object has no attribute 'join' 

Weitere Tests zeigen, dass das Problem mit dem Umfang der Pandas Daten zu sein scheint wider dies verursacht und Ausgabe:

main_df = pd.DataFrame() 

for abbrv in stocks:   
    query = "LSE/" + str(abbrv).strip()  
    df = Quandl.get(query, authtoken=api_key,start_date='2016-03-05', end_date='2016-04-10') 
    df = df['Price'] 
    df.columns = [abbrv] 
    #causes error    
    if main_df.empty: 
     main_df = df 
    else: 
     main_df = main_df.join(df) 

aber dies kein Fehler nur ein Datensatz verursacht jedoch zurück:

for abbrv in stocks: 
    main_df = pd.DataFrame() 
    query = "LSE/" + str(abbrv).strip()  
    df = Quandl.get(query, authtoken=api_key,start_date='2016-03-05', end_date='2016-04-10') 
    df = df['Price'] 
    df.columns = [abbrv] 

    if main_df.empty: 
     main_df = df 
    else: 
     main_df = main_df.join(df) 
+1

Bitte geben Sie ein reproduzierbares Beispiel an. Außerdem gibt die Fehlermeldung an, dass "main_df" eine Serie ist und kein DataFrame – joris

+0

Code oben sollte als Ursache für den Fehler funktionieren. Nach deinem Kommentar habe ich den Code jedoch geändert und es scheint ein Problem mit dem Umfang zu sein. –

+0

Sorry, das hat nicht funktioniert, ich versuche jetzt einen anderen Weg, um den gleichen Dank zu erreichen. –

Antwort

0

mir scheint, dass das Problem mit Ihrem Code irgendwo hier in der Nähe:

... 
df = df['Price'] ## <- you are turning the DataFrame to a Series here 
df.columns = [abbrv] ## <- no effect whatsoever on a Series 
print(query) 
print(df) 

Was ich stattdessen tun würde, ist einfach die neue Zeile zu Ihrem vorhandenen DataFrame hinzufügen.

## if main_df.empty: ## <- remove this line 
## main_df = df ## This should be changed to the line below 
main_df[abbrv] = df ## This will just add the new column to you df and use the Series as data 
## else: ## <- remove this line 
## main_df = main_df.join(df) ## <- remove this line 
+0

Vielen Dank, ich werde das heute Abend versuchen. –

+0

@teshHi Klar, ich hoffe es hilft. Bitte denken Sie daran, die Antwort zu akzeptieren, wenn Sie es hilfreich finden. – Thanos

+0

Gleiches Problem, es speichert nur einen Datenbestand. Ich lerne immer noch, also werde ich weiter lernen und dann wieder besuchen. Vielen Dank. –