2016-04-17 3 views
1

Импортирует модули:Невозможно присоединиться к dataframe даже после того, как следование примеру

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

чтения апи ключ:

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

В настоящее время функция читает файл CSV, чтобы получить коды, однако я планирую изменить это к sqllite ..

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

    return stocks[0:] 

Получить коды акций от quandl это работает.

def getStockValues():  
    stocks = stock_list() 
    main_df = pd.DataFrame() 

    for abbrv in stocks: 

     query = "LSE/" + str(abbrv).strip() 

     df = Quandl.get(query, authtoken=api_key,start_date='2016-04-05', end_date='2016-04-10') 
     df = df['Price'] 
     df.columns = [abbrv] 
     print(query) 
     print(df) 

Данное заявление вызывает проблемы по какой-либо причине, пока цикл не может присоединиться к дополнительным ценам на акции.

 #This statement Prints as 
     print(df.tail(5)) 
     #causes error    
     if main_df.empty: 
      main_df = df 
     else: 
      main_df = main_df.join(df) 
#    exit 

    print('Task done!') 


getStockValues() 

Это результат выводов печати и ошибок соединения.

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' 

Дальнейшие тесты показали, что этот вопрос, как представляется, с областью данных панд объект это вызывает и вопрос:

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) 

Однако это не приводит к ошибке, однако, только возвращает один набор данных:

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

Просьба представить воспроизводимый пример. Кроме того, сообщение об ошибке указывает, что 'main_df' является серией, а не кодом DataFrame – joris

+0

, который должен работать так, как в случае ошибки. Однако после вашего комментария я изменил код и, похоже, проблема с областью. –

+0

Жаль, что это не сработало, теперь я пытаюсь найти другой способ добиться той же благодарности. –

ответ

0

Кажется мне, что проблема с кодом находится где-то здесь:

... 
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) 

Вместо этого я просто добавлю новую строку в существующий DataFrame.

## 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

Большое спасибо, я попробую сегодня. –

+0

@teshHi Конечно, надеюсь, это поможет. Не забудьте «принять» ответ, если вы сочтете это полезным. – Thanos

+0

Такая же проблема сохраняет только один запасной фрейм. Я все еще учусь, поэтому буду продолжать учиться, а затем снова посещать. Большое спасибо. –