我有一个系列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.
答案 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
,则上述解决方案应该可以正常工作。