4
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)

然后是错误:</p>

文件“pandas\index.pyx”,第 137 行,在 pandas.index.IndexEngine.get_loc (pandas\index.c:4066) 文件“pandas\index.pyx”,第 159 行,在 pandas.index.IndexEngine.get_loc ( pandas\index.c:3930) 文件“pandas\hashtable.pyx”,第 675 行,在 pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12408) 文件“pandas\hashtable.pyx”,第 683 行,在pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12359) KeyError: datetime.date(2016, 5, 2)

请告诉我该怎么做?

4

3 回答 3

2

另一种解决方案是分配列表转换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)
于 2016-09-12T06:12:03.467 回答
2

DataFrame.set_index() 需要一个列名或列列表作为参数,所以你应该这样做:

dateForm['date'] = poorList
dateForm.set_index('date', inplace=True)
于 2016-09-12T04:20:00.877 回答
1

要生成带有时间戳的索引,您可以使用DatetimeIndex或 Index 构造函数并传入日期时间对象列表:

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

另一种方法是将列表转换为数组,因为set_index它接受它的键作为数组并相应地指定它的 dtype。

dateForm.set_index(np.array(poorList, dtype='datetime64'), inplace=True)
于 2016-09-12T06:06:21.833 回答