Python 重命名设置为索引的列
我正在使用从yahoo提取股票数据的脚本,为了使用它,我需要更改列名,使它们都是小写。这在所有其他列上都可以正常工作,除了“Date”,因为某些原因它不会更改。我尝试在Python 重命名设置为索引的列,python,pandas,csv,stock,Python,Pandas,Csv,Stock,我正在使用从yahoo提取股票数据的脚本,为了使用它,我需要更改列名,使它们都是小写。这在所有其他列上都可以正常工作,除了“Date”,因为某些原因它不会更改。我尝试在set\u index之前重命名这些列,但是脚本停止保存csv 这是更改名称的行 df.rename(columns={'Date':'date', 'High':'high', 'Low':'low',
set\u 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))
在我更新(尝试)之后
然后这个
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)
要重命名索引,必须执行以下操作
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)
我刚刚更新了上面的代码,我按照你说的做了,但它正在重命名除“日期”列之外的所有列。我认为这是因为它使用它作为索引,而不考虑它自己的列,我也尝试过将它作为一个新函数并以这种方式重命名,但它没有改变,我已经更新了答案,使它更详细。你能试试这个吗?所以我试着用几种不同的方式格式化它并改变顺序,但它似乎不起作用。我在上一次编辑问题时添加了两种方法。这应该可以帮到你。
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)