2016-09-12 21 views
3
poorList = [datetime.date(2016, 5, 2), 
      datetime.date(2016, 8, 26), 
      datetime.date(2016, 6, 9), 
      datetime.date(2016, 3, 4)] 

dateForm.set_index(poorList) 

然後它是錯誤:蟒蛇我想set_index dateFrame與日期時間

File "pandas\index.pyx", line 137, in pandas.index.IndexEngine.get_loc (pandas\index.c:4066) File "pandas\index.pyx", line 159, in pandas.index.IndexEngine.get_loc (pandas\index.c:3930) File "pandas\hashtable.pyx", line 675, in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12408) File "pandas\hashtable.pyx", line 683, in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12359) KeyError: datetime.date(2016, 5, 2)

請告訴我該怎麼辦呢?

+0

不是您在搜索做重新索引呢?提供更多資料,如dateForm.head() – Boud

回答

2

DataFrame.set_index()預期的是列名或作爲參數列的列表,所以你應該做的:

dateForm['date'] = poorList 
dateForm.set_index('date', inplace=True) 
+0

的內容抱歉無效 – ordinaryProgrammer

+0

請問您的意思是無效嗎? – olegsson

1

要生成與時間戳索引,您可以使用該DatetimeIndex或指數的構造並通過在datetime對象的列表:

dateForm.set_index(pd.DatetimeIndex(poorList), inplace=True) # Even pd.Index() works 

做將列表轉換成數組作爲​​接受它作爲數組鍵,指定它的D型相應的另一種方式。

dateForm.set_index(np.array(poorList, dtype='datetime64'), inplace=True) 
1

另一種解決方案是分配列表轉換to_datetimeDatetimeIndex

poorList = [datetime.date(2016, 5, 2), 
      datetime.date(2016, 8, 26), 
      datetime.date(2016, 6, 9), 
      datetime.date(2016, 3, 4)] 

dateForm.index = pd.DatetimeIndex(poorList) 

print (dateForm.index) 
DatetimeIndex(['2016-05-02', '2016-08-26', '2016-06-09', '2016-03-04'], 
dtype='datetime64[ns]', freq=None) 

解決方案與樣本:

dateForm = pd.DataFrame({'A':[1,2,3,7], 
         'B':[4,5,6,8]}) 

print (dateForm) 
    A B 
0 1 4 
1 2 5 
2 3 6 
3 7 8 

poorList = [datetime.date(2016, 5, 2), 
      datetime.date(2016, 8, 26), 
      datetime.date(2016, 6, 9), 
      datetime.date(2016, 3, 4)] 

dateForm.index = pd.to_datetime(poorList) 
print (dateForm) 
      A B 
2016-05-02 1 4 
2016-08-26 2 5 
2016-06-09 3 6 
2016-03-04 7 8 

print (dateForm.index) 
DatetimeIndex(['2016-05-02', '2016-08-26', '2016-06-09', '2016-03-04'], 
       dtype='datetime64[ns]', freq=None)