我对何时可以将函数应用于数组元素而不是整个数组感到困惑。对于exapmle:
我有一个时间戳的数据框,我想在数据帧中获取独特的日期和星期几。拉出日期非常简单:
dates_only = df.dtime.dt.date.unique()
那时:
print type(dates_only) -> <type 'numpy.ndarray'>
print type(dates_only[0]) -> <type 'datetime.date'>
print dates_only[0].weekday() -> 4
但我无法通过应用工作日功能创建新系列:
dow = dates_only.weekday()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-10-76986b9b07a2> in <module>()
----> 4 dow = dates_only.weekday()
AttributeError: 'numpy.ndarray' object has no attribute 'weekday'
我是否需要以某种方式投射ndarray,或者我应该在循环中处理这些:
for i in range(len(dates_only)):
dow[i] = dates_only[i].weekday()
我认为它会起作用,但它似乎错了......
感谢您的期待!
答案 0 :(得分:1)
问题Order order = Ebean.find(Order.class, 12);
order.setStatus("SHIPPED");
...
// update the order
Ebean.save(order);
返回unique
,但您可以将其转换为DatetimeIndex
,然后使用DatetimeIndex.weekday
,最后使用numpy array
构造函数:
Series
start = pd.to_datetime('2015-02-24')
rng = pd.date_range(start, periods=10)
df = pd.DataFrame({'dtime': rng, 'a': range(10)})
print (df)
a dtime
0 0 2015-02-24
1 1 2015-02-25
2 2 2015-02-26
3 3 2015-02-27
4 4 2015-02-28
5 5 2015-03-01
6 6 2015-03-02
7 7 2015-03-03
8 8 2015-03-04
9 9 2015-03-05
另一种解决方案是转换dates_only = pd.DatetimeIndex(df.dtime.dt.date.unique())
dow = dates_only.weekday
print (dow)
[1 2 3 4 5 6 0 1 2 3]
dow = pd.Series(dates_only.weekday, index=df.index)
print (dow)
0 1
1 2
2 3
3 4
4 5
5 6
6 0
7 1
8 2
9 3
dtype: int32
to_datetime
,然后使用numpy array
构造函数:
Series
答案 1 :(得分:0)
你有一组时间对象。
时间对象的方法是week_day():
dates_only = pd.Series(pd.to_datetime(df.dtime.dt.date.unique()), index=df.index)
print (dates_only)
dow = dates_only.dt.weekday
print (dow)
0 1
1 2
2 3
3 4
4 5
5 6
6 0
7 1
8 2
9 3
dtype: int64
但这并没有把时间对象的ARRAY变成时间对象!
换句话说:当你有一盒苹果时,这是否意味着你可以自己吃盒子?
有关可能的解决方案,请参阅here。
答案 2 :(得分:0)
你不能像这样处理一个数组。您必须在编写时循环遍历数组(对我来说看起来不对)或使用map:
dow = map(lambda date: date.weekday(), dates_only)