python - 从 Pandas 数据框列中删除 'seconds' 和 'minutes'

标签 python pandas dataframe time-series

给定一个像这样的数据框:

import numpy as np
import pandas as pd

df = pd.DataFrame(
{'Date' : pd.date_range('1/1/2011', periods=5, freq='3675S'),
 'Num' : np.random.rand(5)})
                 Date       Num
0 2011-01-01 00:00:00  0.580997
1 2011-01-01 01:01:15  0.407332
2 2011-01-01 02:02:30  0.786035
3 2011-01-01 03:03:45  0.821792
4 2011-01-01 04:05:00  0.807869

我想删除“分”和“秒”信息。

以下(主要是从:How to remove the 'seconds' of Pandas dataframe index? 窃取的)工作正常,

df = df.assign(Date = lambda x: pd.to_datetime(x['Date'].dt.strftime('%Y-%m-%d %H')))
                 Date       Num
0 2011-01-01 00:00:00  0.580997
1 2011-01-01 01:00:00  0.407332
2 2011-01-01 02:00:00  0.786035
3 2011-01-01 03:00:00  0.821792
4 2011-01-01 04:00:00  0.807869

但是将日期时间转换为字符串然后再转换回日期时间感觉很奇怪。有没有办法更直接地做到这一点?

最佳答案

dt.round

这是应该如何完成的...使用 dt.round

df.assign(Date=df.Date.dt.round('H'))

                 Date       Num
0 2011-01-01 00:00:00  0.577957
1 2011-01-01 01:00:00  0.995748
2 2011-01-01 02:00:00  0.864013
3 2011-01-01 03:00:00  0.468762
4 2011-01-01 04:00:00  0.866827

旧答案

一种方法是设置索引并使用resample

df.set_index('Date').resample('H').last().reset_index()

                 Date       Num
0 2011-01-01 00:00:00  0.577957
1 2011-01-01 01:00:00  0.995748
2 2011-01-01 02:00:00  0.864013
3 2011-01-01 03:00:00  0.468762
4 2011-01-01 04:00:00  0.866827

另一种方法是去除datehour 组件

df.assign(
    Date=pd.to_datetime(df.Date.dt.date) +
         pd.to_timedelta(df.Date.dt.hour, unit='H'))

                 Date       Num
0 2011-01-01 00:00:00  0.577957
1 2011-01-01 01:00:00  0.995748
2 2011-01-01 02:00:00  0.864013
3 2011-01-01 03:00:00  0.468762
4 2011-01-01 04:00:00  0.866827

关于python - 从 Pandas 数据框列中删除 'seconds' 和 'minutes',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43400331/

相关文章:

python - 当服务器未完全消耗请求正文时连接重置

python - 根据两个不同列中的相应值在 DataFrame 中创建新列

python - 如何更改两个数据帧之间公共(public)元素的值?

Python 2.7 - 计算每行的分位数

python - 随机播放 DataFrame 行

python - Pandas:如何在函数内将 sum() 或 mean() 分配给 df.groupby?

list - 使用不同维度的数据框列表列表

没有sudo的python setup.py安装

python - 为什么使用 from __future__ import print_function 会破坏 Python2 样式的打印?

python - 寻找终止密码子