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

JMH*_*JMH 3 python python-3.x pandas

我希望提取给定指数中约 200 种证券的历史数据。我从 csv 文件导入证券列表,然后迭代它们以从 quandl api 中提取各自的数据。每个证券的数据框有 12 列,因此我使用证券名称和调整后的收盘价创建一个新列,以便稍后识别该系列。

当我尝试将所有新列加入到空数据框中时,我收到错误。我收到属性错误:

'''
Print output data
'''
grab_constituent_data()
AttributeError: 'Series' object has no attribute 'join'
Run Code Online (Sandbox Code Playgroud)

下面是迄今为止我用来到达这里的代码。

'''
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())
Run Code Online (Sandbox Code Playgroud)

ang*_*lly 6

看来在你的行

df = df['{} Adj_Close'.format(str(abbv))]
Run Code Online (Sandbox Code Playgroud)

你得到的是一个系列而不是一个数据框。如果您想将系列转换为数据帧,可以使用函数 to_frame() ,例如:

df = df['{} Adj_Close'.format(str(abbv))].to_frame()
Run Code Online (Sandbox Code Playgroud)

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