尝试迭代并加入Pandas DF:AttributeError:'Series'对象没有属性'join'

时间:2016-11-14 04:53:31

标签: python python-3.x pandas

我希望提取给定指数中约200种证券的历史数据。我从csv文件导入证券列表,然后迭代它们从quandl api中提取它们各自的数据。每个安全性的数据帧有12列,因此我创建了一个新列,其中包含安全性名称和调整后的关闭值,因此我可以稍后识别该系列。

当我尝试将所有新列连接到空数据帧时,我收到错误。我收到属性错误:

'''
Print output data
'''
grab_constituent_data()
AttributeError: 'Series' object has no attribute 'join'

以下是我到目前为止所使用的代码。

'''
Import the modules necessary for analysis
'''

import quandl
import pandas as pd
import numpy as np

'''
Set file pathes and API keys
'''

ticker_path = ''
auth_key = ''

'''
Pull a list of tickers in the IGM ETF
'''

def ticker_list():
    df = pd.read_csv('{}IGM Tickers.csv'.format(ticker_path))
    # print(df['Ticker'])
    return df['Ticker']

'''
Pull the historical prices for the securities within Ticker List
'''

def grab_constituent_data():
    tickers = ticker_list()
    main_df = pd.DataFrame()

    for abbv in tickers:
        query = 'EOD/{}'.format(str(abbv))
        df = quandl.get(query, authtoken=auth_key)
        print('Competed the query for {}'.format(query))

        df['{} Adj_Close'.format(str(abbv))] = df['Adj_Close'].copy()
        df = df['{} Adj_Close'.format(str(abbv))]
        print('Completed the column adjustment for {}'.format(str(abbv)))

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

    print(main_df.head())

1 个答案:

答案 0 :(得分:2)

似乎在您的行中

df = df['{} Adj_Close'.format(str(abbv))]

您获得的是Serie而不是Dataframe。如果要将系列转换为数据帧,可以使用to_frame()函数,如:

df = df['{} Adj_Close'.format(str(abbv))].to_frame()

我没有检查您的代码是否更简单,但这应该可以解决您的问题。