【发布时间】:2014-09-27 13:04:02
【问题描述】:
假设我有一个时间戳值的 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,因此没有这些属性,但似乎有一种更简单的方法来利用矩阵运算。
有没有更直接的方法?
【问题讨论】:
-
pd.Datetimeindex(sales['timestamp']).hour将比使用.apply快得多 -
这就是我要走的路。我正在寻找一种使用
pd.to_datetime迭代地将这些列转换为类似日期时间索引的对象的方法。但是整个列本身需要是一个 datetimeindex 对象,这不是用pd.to_datetime实现的。 -
您也可以使用
pd.to_datetime(column.values,box=True)来执行此操作(我认为有时会添加一个Series.to_index()方法来基本上直接执行此操作。这都是矢量化的。 -
@JohnE 不确定你在说什么
-
@Jeff --
Datetimeindex应该是DatetimeIndex,对吧? (索引中的大写 I)