如何从一系列dtype中找到第一周(&#39; <m8 [ns]')

时间:2017-06-27 14:43:48

标签: python-3.x pandas numpy

=“”

我有一个系列p95类型的时间戳p

我试图将它转换为一周的第一天,如下所示:

dtype('<M8[ns]')

这显然不是正确的答案

p - pd.Timedelta(days=p.dt.dayofweek) 

但是什么?

------------完整堆栈跟踪-----------------

TypeError: Invalid type <class 'pandas.core.series.Series'>. Must be int or float.

1 个答案:

答案 0 :(得分:1)

您当前的代码正在尝试从一个系列中创建一个timedelta对象,因此构造函数失败。

p - pd.to_timedelta(p.dt.dayofweek, unit='D')

应该做你想做的事。

修改

例如:

help(pd)
Help on package pandas:

...

VERSION
    0.18.1

...



p = pd.date_range('1/1/2017', '1/23/2017').to_series().reset_index(drop=True)

p.dtype
Out[8]: dtype('<M8[ns]')

print(p.dtype)
datetime64[ns]

p - pd.to_timedelta(p.dt.dayofweek, unit='D')
Out[10]: 
0    2016-12-26
1    2017-01-02
2    2017-01-02
3    2017-01-02
4    2017-01-02
5    2017-01-02
6    2017-01-02
7    2017-01-02
8    2017-01-09
9    2017-01-09
10   2017-01-09
11   2017-01-09
12   2017-01-09
13   2017-01-09
14   2017-01-09
15   2017-01-16
16   2017-01-16
17   2017-01-16
18   2017-01-16
19   2017-01-16
20   2017-01-16
21   2017-01-16
22   2017-01-23
dtype: datetime64[ns]

print(pd.to_timedelta(p.dt.dayofweek, unit='D').dtype)
timedelta64[ns]

<强> EDIT2:

总结下面的评论讨论,仍然遇到的问题是由于熊猫的过时版本。如果pandas版本大于0.18.0,则上述解决方案应该可以正常工作。