Python Pandas-将dataframe多索引转换为datetime对象

Python Pandas-将dataframe多索引转换为datetime对象,python,pandas,Python,Pandas,考虑一个输入文件,b.dat: string,date,number a string,2/5/11 9:16am,1.0 a string,3/5/11 10:44pm,2.0 a string,4/22/11 12:07pm,3.0 a string,4/22/11 12:10pm,4.0 a string,4/29/11 11:59am,1.0 a string,5/2/11 1:41pm,2.0 a string,5/2/11 2:02pm,3.0 a string,5/2/11 2:5

考虑一个输入文件,
b.dat

string,date,number
a string,2/5/11 9:16am,1.0
a string,3/5/11 10:44pm,2.0
a string,4/22/11 12:07pm,3.0
a string,4/22/11 12:10pm,4.0
a string,4/29/11 11:59am,1.0
a string,5/2/11 1:41pm,2.0
a string,5/2/11 2:02pm,3.0
a string,5/2/11 2:56pm,4.0
a string,5/2/11 3:00pm,5.0
a string,5/2/14 3:02pm,6.0
a string,5/2/14 3:18pm,7.0
我可以按如下方式对每月总计进行分组:

b=pd.read_csv('b.dat')
b['date']=pd.to_datetime(b['date'],format='%m/%d/%y %I:%M%p')
b.index=b['date']
bg=pd.groupby(b,by=[b.index.year,b.index.month])
bgs=bg.sum()
分组总数的索引如下所示:

bgs

            number
2011 2       1
     3       2
     4       8
     5      14
2014 5      13

bgs.index

MultiIndex(levels=[[2011, 2014], [2, 3, 4, 5]],
       labels=[[0, 0, 0, 0, 1], [0, 1, 2, 3, 3]])
我想将索引重新格式化为日期时间格式(天可以是月的第一天)

我尝试了以下方法:

bgs.index = pd.to_datetime(bgs.index)


两者都失败了。有人知道我怎么做吗?

您可以通过所需的日期计算从索引创建一列,然后将其设置为索引:

bgs['expanded_date'] = bgs.index.map(lambda x: datetime.date(x.year, x.month, 1))
bgs.set_index('expanded_date')
按“M”考虑,而不是按DatetimeIndex的属性分组:

In [11]: b.resample('M', how='sum').dropna()
Out[11]:
            number
date
2011-02-28       1
2011-03-31       2
2011-04-30       8
2011-05-31      14
2014-05-31      13

注意:如果不想在这两个月之间使用NaN,则必须删除NaN。

如果将此代码直接用于Pandas 0.13,则会出现错误。它在调用
pd.to_datetime
时中断,通过
KeyError声称
%p
的使用不正确:
/pandas/tslib.so in pandas.tslib.array.\u strtime(pandas/tslib.c:20989)
。事实上,我可以用任何需要解析“am”或“pm”的字符串重现pandas错误。在处理如何将其传递到strftime或任何东西时,一定有一个bug。打开了一个@EMS获取信息。我使用的是0.13.1版(它对我有效),非常感谢-我正在尝试查找有关“rule”参数的更多信息。你怎么知道“M”组的月份。我想知道它还能做什么。为了在手册页中找到它,可能有一个我不知道的搜索词?关键字是“offset”:
In [11]: b.resample('M', how='sum').dropna()
Out[11]:
            number
date
2011-02-28       1
2011-03-31       2
2011-04-30       8
2011-05-31      14
2014-05-31      13