我有一个具有自动生成的索引的pandas.DataFrame
被叫对象df
,其中带有一列dt
:
df['dt'].dtype, df['dt'][0]
# (dtype('<M8[ns]'), Timestamp('2014-10-01 10:02:45'))
我想做的是创建一个新的列,将其截断为小时精度。我目前正在使用:
df['dt2'] = df['dt'].apply(lambda L: datetime(L.year, L.month, L.day, L.hour))
这行得通,所以很好。但是,我想知道有一种使用pandas.tseries.offsets
或创建DatetimeIndex
或类似方法的好方法。
因此,如果可能的话,是否有一些pandas
巫术来做到这一点?
在熊猫和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
这是截断时间戳的另一种方法。与不同floor
,它支持截断精度到年或月。
您可以临时调整基础NumPydatetime64
数据类型的精度单位,将其从更改[ns]
为[h]
:
df['dt'].values.astype('<M8[h]')
这会将所有内容截断为小时精度。例如:
>>> 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]
相同的方法应该适用于任何其他单位:months 'M'
,minutes'm'
等:
'<M8[Y]'
'<M8[M]'
'<M8[D]'
'<M8[m]'
'<M8[s]'
问题内容: 例如,我有变量3.545555555,我希望将其截断为3.54。 问题答案: 如果您希望将其用于显示目的,请使用: 如果需要进行计算,请使用:
问题内容: 我如何获得1324343032.324? 如您在下面看到的,以下内容不起作用: 问题答案: 如果要将其保存为,可以在其周围使用其他内容。
问题内容: 有什么方法可以将列表截断(例如到前100个元素),然后丢弃其他列表(无需遍历单个元素)? 问题答案: 用途: 您应该牢记返回项目的视图,因此,如果您希望列表的其余部分有资格进行垃圾回收,则应将想要的项目复制到新的项目: 如果列表短于指定的大小,则应超出范围例外。选择所需大小的最小值和列表的当前大小作为结束索引。 最后,请注意,第二个参数应比上一个所需的索引大一个。
我从获取事件并存储到中。解析,其中包含字段,为表创建列,如下所示: 在代码中: 甚至尝试了:,也生成了相同的错误。如何通过spark作业将正确强制转换为并插入到中
当我使用PostgreSQL 11.8中的函数构建json时,我试图截断双精度值,但运气不好。更准确地说,我试图将19.98999999999984数字截断为两位小数,但要确保它不会四舍五入到20.00(它就是这样做的),而是保持在19.98。 顺便说一句,我到目前为止尝试的是使用: 1),我得到值20.00 2)我得到值19.99- [42883]错误:函数舍入(双精度,整数)不存在 下面是我使
在更改MySql列的数据类型以存储Twilio调用ID(34个字符字符串)后,我尝试使用以下命令手动更改该列中的数据: 但是,我收到一个错误,看到列的数据类型被正确修改而没有意义?