Python 熊猫数据帧赢得';t重新排列列

Python 熊猫数据帧赢得';t重新排列列,python,pandas,dataframe,quandl,Python,Pandas,Dataframe,Quandl,我正在编写一个脚本,从Quandl检索数据,该脚本在保存数据之前对数据进行操作。我被困在一个步骤中,我想使用熊猫重新排列我的列,比如df=df[['code','Date','Open','High','Low','Close','Volume']]或者更简单地说,用代码交换日期 我认为这是因为系统自动将日期设置为索引,但是回溯显示['Date']不在索引中 我观察到,当df.index=df.index.strftime(“%Y%m%d”)打印2输出时,日期标签会从数据帧中消失。如果我注释掉这

我正在编写一个脚本,从Quandl检索数据,该脚本在保存数据之前对数据进行操作。我被困在一个步骤中,我想使用熊猫重新排列我的列,比如
df=df[['code','Date','Open','High','Low','Close','Volume']]
或者更简单地说,用代码交换日期

我认为这是因为系统自动将日期设置为索引,但是回溯显示
['Date']不在索引中

我观察到,当
df.index=df.index.strftime(“%Y%m%d”)
打印2输出时,日期标签会从数据帧中消失。如果我注释掉这一行,错误代码仍然存在

我尝试插入
df.set_index('code')
以查看更改索引是否有帮助,但没有

有人知道这里有什么问题吗

代码

myArr = ['CHRIS/CME_AD1']
cDate=int(time.strftime("%Y%m%d"))

# get quandl data, edit dataframe & save to csv
for qCode in myArr:
    data = qdl.get(qCode, start_date=StartDate)
    df = pd.DataFrame(data)
 #   df.to_dict()
    qID=(str(qCode[qCode.find('/')+1:]))
    print(df)

# format data & save
    df.insert(loc=0, column='Code', value=qID)
    df=df.drop(columns=['Change','Settle','Previous Day Open Interest'])
    df.rename(columns={'Last':'Close'}, inplace=True)  
    df.index = df.index.strftime('%Y%m%d')
    print(df) 
    df = df[['Code','Date','Open','High','Low','Close','Volume']] #reorder columns
    df.to_csv(path + qID + '_' + str(cDate) + '.txt', sep=',', index=True, header=1) 
print('Quandl Download Complete')
回溯

Traceback (most recent call last):
  File "\\progsql\SQL\Script\Python\EOD_Quandl - Copy.py", line 29, in <module>
    df = df[['Code','Date','Open','High','Low','Close','Volume']] #reorder columns
  File "C:\Python35\lib\site-packages\pandas\core\frame.py", line 2679, in __getitem__
    return self._getitem_array(key)
  File "C:\Python35\lib\site-packages\pandas\core\frame.py", line 2723, in _getitem_array
    indexer = self.loc._convert_to_indexer(key, axis=1)
  File "C:\Python35\lib\site-packages\pandas\core\indexing.py", line 1327, in _convert_to_indexer
    .format(mask=objarr[mask]))
KeyError: "['Date'] not in index"
打印2-后期操作

             Code    Open    High     Low   Close    Volume
20180510  CME_AD1  0.7460  0.7540  0.7455  0.7534  125257.0
20180511  CME_AD1  0.7534  0.7567  0.7522  0.7538   93512.0
20180514  CME_AD1  0.7543  0.7565  0.7525  0.7529   72806.0
20180515  CME_AD1  0.7526  0.7538  0.7449  0.7471  129077.0
20180516  CME_AD1  0.7473  0.7524  0.7448  0.7514  125867.0
20180517  CME_AD1  0.7516  0.7548  0.7498  0.7509  108841.0
20180518  CME_AD1  0.7513  0.7529  0.7489  0.7511   87656.0
20180521  CME_AD1  0.7529  0.7588  0.7504  0.7583  118843.0
20180522  CME_AD1  0.7586  0.7607  0.7567  0.7576  104227.0
20180523  CME_AD1  0.7575  0.7584  0.7523  0.7558  149203.0
20180524  CME_AD1  0.7568  0.7584  0.7543  0.7579  102328.0
20180525  CME_AD1  0.7578  0.7591  0.7543  0.7549   85082.0

“Date”是数据框的索引名称,而不是其中一列,因此您不能将其与其他列一起“重新排序”。

我花了一些时间研究使用
pd.dataframe.set\u index
pd.dataframe.reset\u index
的解决方案,但原始索引一直保持不变

由于索引不能被视为一列,且df必须有一个索引,因此我想到: -重命名索引 -将其复制到列中 -重新排序列 -使用
index=False将
保存到\u csv

这有点冗长,但在这种情况下完成了任务

# format data & save  
    df.index.names = ['ID']
    df['Date'] = df.index
    df.insert(loc=0, column='Code', value=qID)
    df=df.drop(columns=['Change','Settle','Previous Day Open Interest'])
    df.rename(columns={'Last':'Close'}, inplace=True)  
    df.index = df.index.strftime('%Y%m%d')
    df = df[['Code','Date','Open','High','Low','Close','Volume']] #reorder columns
    df.to_csv(path + qID + '_' + str(cDate) + '.txt', sep=',', index=False, header=0) 

    print(df) 

也许这就是pandas的输出方式,但它看起来好像在说包含单词date的列表的字符串表示不在索引中。我的想法是使用df.set_index('Code')将date设为一列。我怀疑这不起作用,因为这些值不是唯一的。我将创建一个索引,并确保Date是一列。
# format data & save  
    df.index.names = ['ID']
    df['Date'] = df.index
    df.insert(loc=0, column='Code', value=qID)
    df=df.drop(columns=['Change','Settle','Previous Day Open Interest'])
    df.rename(columns={'Last':'Close'}, inplace=True)  
    df.index = df.index.strftime('%Y%m%d')
    df = df[['Code','Date','Open','High','Low','Close','Volume']] #reorder columns
    df.to_csv(path + qID + '_' + str(cDate) + '.txt', sep=',', index=False, header=0) 

    print(df)