[英]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
您可以使用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.