2016-08-30 10 views
0

Ich habe ein kleines Problem, wenn ich versuche, meinen Code kompilieren zu lassen. Sieht aus wie die Zeile mit main_df = df einen Fehler verursacht, und ich verstehe nicht ganz warum.pandas: 'Join' kann nicht kompiliert werden

Jede Hilfe wird sehr geschätzt.

import quandl 
import pandas as pd 

# API key was removed 
api_key = 'X' 
fiddy_states = pd.read_html('https://simple.wikipedia.org/wiki/List_of_U.S._states',flavor='html5lib') 

main_df = pd.DataFrame() 

for abbv in fiddy_states[0][0][1:]: 
    query = "FMAC/HPI_"+str(abbv) 
    df = quandl.get(query, authtoken=api_key) 

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

print(main_df.head()) 

ich diesen Fehler:

Traceback (most recent call last): File "C:/Users/Dave/Documents/Python Files/helloworld.py", line 17, in main_df = main_df.join(df)

File "C:\Python35\lib\site-packages\pandas\core\frame.py", line 4385, in join rsuffix=rsuffix, sort=sort)

File "C:\Python35\lib\site-packages\pandas\core\frame.py", line 4399, in _join_compat suffixes=(lsuffix, rsuffix), sort=sort)

File "C:\Python35\lib\site-packages\pandas\tools\merge.py", line 39, in merge return op.get_result()

File "C:\Python35\lib\site-packages\pandas\tools\merge.py", line 223, in get_result rdata.items, rsuf)

File "C:\Python35\lib\site-packages\pandas\core\internals.py", line 4445, in items_overlap_with_suffix to_rename) ValueError: columns overlap but no suffix specified: Index(['Value'], dtype='object')

+0

Was möchten Sie tun? Hängen Sie die neuen Daten bei jeder Iteration an den Datenrahmen an? pd.join macht SQL-Joins, wahrscheinlich nicht das, wonach Sie suchen. Versuchen Sie 'main_df = main_df.append (df)'. – bananafish

+0

Ich suche in diesem Fall eher beizutreten als anzuhängen. Das Anhängen funktioniert, gibt mir aber nicht das, wonach ich suche. Weißt du, warum es in diesem Fall nicht funktioniert? – wowdavers

+0

Nun, ich weiß nicht, wonach Sie suchen. Können Sie ein Beispiel eingeben? – bananafish

Antwort

1

Sie eine Liste der Codes an die quandl.get Funktion übergeben können, dann erhalten Sie einen Datenrahmen zurück mit Daten für jeden Code in einer Spalte. Code:

import quandl 
import pandas as pd 

fiddy_states = pd.read_html('https://simple.wikipedia.org/wiki/List_of_U.S._states', flavor='html5lib') 
data = quandl.get(["FMAC/HPI_"+s for s in fiddy_states[0][0][1:]]) 
+0

Hm, sieht aus wie es funktioniert - vielen Dank! Ich denke, ich bin immer noch ein wenig verwirrt, warum '.join()' in der ursprünglichen Instanz meines Codes nicht funktioniert. – wowdavers

+1

Es funktioniert nicht, da der zurückgegebene Datenrahmen von quandl eine einzelne Spalte mit dem Namen 'Value' für jede get-Abfrage enthält. Wenn Sie also versuchen, eine Verbindung herzustellen, müssen Sie ihm mitteilen, wie die Spalten benannt werden sollen. Wenn Sie auch den Spaltennamen (sagen wir "abbv") in der ursprünglichen for-Schleife setzen, denke ich, dass es funktionieren wird. – bananafish

+0

Ich bin ein bisschen ein Anfänger bei der Verwendung von Pandas, also ertragen Sie mit mir. Wie sagen Sie, dass der Datenrahmen von quandl nur eine einzige Spalte "Value" hat? Außerdem, wo würde ich den Spaltennamen einstellen, und ist der Name willkürlich? Danke vielmals! :) – wowdavers

Verwandte Themen