Jon*_*nts 30 python datetime dataframe pandas
我有一个pandas.DataFrame称为df其具有自动生成的索引,与列dt:
df['dt'].dtype, df['dt'][0]
# (dtype('<M8[ns]'), Timestamp('2014-10-01 10:02:45'))
Run Code Online (Sandbox Code Playgroud)
我想要做的是创建一个截断为小时精度的新列.我目前正在使用:
df['dt2'] = df['dt'].apply(lambda L: datetime(L.year, L.month, L.day, L.hour))
Run Code Online (Sandbox Code Playgroud)
这很有效,所以没关系.但是,我有一个很好的方式使用pandas.tseries.offsets或创建一个DatetimeIndex或类似的.
所以,如果可能的话,是否有一些pandas魔法可以做到这一点?
Ale*_*ley 62
在熊猫和0.18.0以后,有日期时间floor,ceil和round方法,以圆时间戳给定的固定精度/频率.要向下舍入到小时精度,您可以使用:
>>> df['dt2'] = df['dt'].dt.floor('h')
>>> df
dt dt2
0 2014-10-01 10:02:45 2014-10-01 10:00:00
1 2014-10-01 13:08:17 2014-10-01 13:00:00
2 2014-10-01 17:39:24 2014-10-01 17:00:00
Run Code Online (Sandbox Code Playgroud)
这是截断时间戳的另一种方法.floor与之不同,它支持截断到精确度,例如年或月.
您可以临时调整基础NumPy datetime64数据类型的精度单位,将其更改[ns]为[h]:
df['dt'].values.astype('<M8[h]')
Run Code Online (Sandbox Code Playgroud)
这会将所有内容截断为小时精度.例如:
>>> df
dt
0 2014-10-01 10:02:45
1 2014-10-01 13:08:17
2 2014-10-01 17:39:24
>>> df['dt2'] = df['dt'].values.astype('<M8[h]')
>>> df
dt dt2
0 2014-10-01 10:02:45 2014-10-01 10:00:00
1 2014-10-01 13:08:17 2014-10-01 13:00:00
2 2014-10-01 17:39:24 2014-10-01 17:00:00
>>> df.dtypes
dt datetime64[ns]
dt2 datetime64[ns]
Run Code Online (Sandbox Code Playgroud)
相同的方法适用于任何其他单位:月'M',分'm'等等:
'<M8[Y]''<M8[M]''<M8[D]''<M8[m]''<M8[s]'| 归档时间: |
|
| 查看次数: |
19627 次 |
| 最近记录: |