【问题标题】:Rename column that is set as index重命名设置为索引的列
【发布时间】:2020-07-03 17:21:01
【问题描述】:

我正在使用从雅虎提取股票数据的脚本,为了使用它,我需要更改列名,以便它们都是小写的。这适用于所有其他列,除了“日期”,由于某种原因没有改变。我尝试重命名 set_index 之前的列,但随后脚本停止保存 csv。

这里是更改名称的行

df.rename(columns={'Date':'date',
                          'High':'high',
                          'Low':'low',
                          'Open':'open',
                          'Close':'close',
                          'Volume':'volume',
                          'Adj Close':'adj close'}, 
                 inplace=True)

这是它在代码中的样子

def get_data_from_yahoo(reload_sp500=False):
    if reload_sp500:
        tickers = save_sp500_tickers()
    else:
        with open("sp500tickers.pickle", "rb") as f:
            tickers = pickle.load(f)
    if not os.path.exists('stock_dfs'):
        os.makedirs('stock_dfs')
    start = dt.datetime(2010, 6, 8)
    end = dt.datetime.now()
    for ticker in tickers:
        print(ticker)
        if not os.path.exists('stock_dfs/{}.csv'.format(ticker)):
            try:
                df = pdr.get_data_yahoo(ticker, start, end)
                df.reset_index(inplace=True)
                df.set_index("Date", inplace=True)
                df.rename(columns={'Date':'date',
                          'High':'high',
                          'Low':'low',
                          'Open':'open',
                          'Close':'close',
                          'Volume':'volume',
                          'Adj Close':'adj close'}, 
                 inplace=True)
                df.to_csv('stock_dfs/{}.csv'.format(ticker))
                time.sleep(2)
            except:
                continue
        else:
            

            print('Already have {}'.format(ticker))

在我更新(尝试)之后

            try:
                df = pdr.get_data_yahoo(ticker, start, end)
                df.reset_index(inplace=True)
                df.set_index("Date", inplace=True)
                df.rename(columns={'High':'high',
                     'Low':'low',
                     'Open':'open',
                     'Close':'close',
                     'Volume':'volume',
                     'Adj Close':'adj close'}, 
           index = {'Date':'date'}, 
           inplace=True)
                df.to_csv('stock_dfs/{}.csv'.format(ticker))

然后是这个

                df.rename(columns={'High':'high',
                     'Low':'low',
                     'Open':'open',
                     'Close':'close',
                     'Volume':'volume',
                     'Adj Close':'adj close'}, inplace=True) 
                df.rename(index = {'Date':'date'}, inplace=True)

【问题讨论】:

    标签: python pandas csv stock


    【解决方案1】:

    要重命名索引,你必须这样做

     df.rename(columns={'High':'high',
                         'Low':'low',
                         'Open':'open',
                         'Close':'close',
                         'Volume':'volume',
                         'Adj Close':'adj close'},  
               inplace=True)
    
    df.index.rename('date', inplace=True)
    

    【讨论】:

    • 我刚刚对上面的代码进行了更新,我按照你说的做了,但是它正在重命名除“日期”列之外的所有列。我认为这是因为它使用它作为索引而不是将其视为自己的列,我也尝试将其设为一个新函数并以这种方式重命名,但它并没有改变它
    • 我已经更新了答案,使其更加详细。你可以试试这个吗?
    • 所以我尝试用几种不同的方式格式化它并更改顺序,但它似乎不想工作。我添加了我在上次编辑问题时尝试的 2 种方法。
    • 这应该为您完成这项工作。
    猜你喜欢
    • 2018-02-10
    • 1970-01-01
    • 2020-11-12
    • 2021-10-26
    • 1970-01-01
    • 2016-11-12
    • 2018-01-25
    • 2017-08-03
    • 1970-01-01
    相关资源
    最近更新 更多