繁体   English   中英

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

[英]Pandas: Return Hour from Datetime Column Directly

假设我有一个时间戳值的 DataFrame 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 ,因此没有这些属性,但似乎有一种更简单的方法可以使用矩阵运算。

有没有更直接的方法?

假设时间戳是数据帧的索引,您可以执行以下操作:

hours = sales.index.hour

如果您想将其添加到您的销售数据框中,只需执行以下操作:

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

编辑:如果您有几列 datetime 对象,则过程相同。 如果您的数据框中有一列 ['date'],并假设 'date' 具有日期时间值,则您可以从 'date' 访问小时:

hours = sales['date'].hour

Edit2:如果要调整数据框中的列,则必须包含dt

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

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

您可以使用lambda 表达式,例如:

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

你可以试试这个:

sales['time_hour'] = pd.to_datetime(sales['timestamp']).dt.hour

由于最快、最短的答案是在评论中(来自杰夫)并且有一个错字,这里已更正并完整:

sales['time_hour'] = pd.DatetimeIndex(sales['timestamp']).hour

现在我们可以使用:

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

这是一个简单的解决方案:

import pandas as pd
# convert the timestamp column to datetime
df['timestamp'] = pd.to_datetime(df['timestamp'])

# extract hour from the timestamp column to create an time_hour column
df['time_hour'] = df['timestamp'].dt.hour

您还可以创建一个函数,如果需要,您还可以提取月份、年份等,但“时间戳”必须是索引。

for i in range(len(sales)):
  position = sales.index[i]
  hour = position.hour
  month = position.month
  sales.loc[position, 'hour'] = hour
  sales.loc[position, 'month'] = month

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM