熊猫: 直接从日期时间列返回小时

2024-04-29 16:55:33 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个时间戳值的数据帧sales

timestamp               sales_office
2014-01-01 09:01:00     Cincinnati
2014-01-01 09:11:00     San Francisco
2014-01-01 15:22:00     Chicago
2014-01-01 19:01:00     Chicago

我想创建一个新列time_hour。我可以按原样编写一个短函数并使用apply()迭代地应用它来创建它:

def hr_func(ts):
    return ts.hour

sales['time_hour'] = sales['timestamp'].apply(hr_func)

然后我会看到这个结果:

timestamp               sales_office         time_hour
2014-01-01 09:01:00     Cincinnati           9
2014-01-01 09:11:00     San Francisco        9
2014-01-01 15:22:00     Chicago              15
2014-01-01 19:01:00     Chicago              19

我想实现的是像这样一个更短的转变(我知道这是错误的,但我得到的精神):

sales['time_hour'] = sales['timestamp'].hour

很明显,该列是Series类型,因此不具有这些属性,但是似乎有一种更简单的方法来使用矩阵运算。

有没有更直接的方法?


Tags: 方法time时间hrtimestampfuncapplyoffice
3条回答

假设timestamp是数据帧的索引,您可以

    hours = sales.index.hour

如果你想把它添加到你的销售数据框中,只要

    import pandas as pd
    pd.concat([sales, pd.DataFrame(hours, index=sales.index)], axis = 1)

编辑: 如果您有几列datetime对象,则其进程相同。如果数据框中有一列[“date”],并且假定“date”具有datetime值,则可以从“date”访问小时:

    hours = sales['date'].hour

编辑2: 如果要调整数据帧中的列,则必须包含dt

sales['datehour'] = sales['date'].dt.hour

对于后代:从0.15.0开始,有一个方便的.dt accessor可用于从日期时间/周期序列中提取此类值(在上述情况下,仅sales.timestamp.dt.hour

您可以使用lambda expression,例如:

sales['time_hour'] = sales.timestamp.apply(lambda x: x.hour)

相关问题 更多 >