2016-09-12 23 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)