0
我的pandas.DataFrame包含一個包含時間戳值的列。基於列值的屬性值篩選DataFrame的行
我特別想使用那些位於特定時間範圍內的行,從開始小時到結束小時,忽略日期部分。
我試圖實現這個使用布爾數組作爲索引:
import datetime
import pandas
from random import randrange as rr
# generate random timestamps
timestamps = [datetime.datetime(2000,1,1,rr(24),rr(60)) for i in xrange(100)]
# insert into DataFrame
df = pandas.DataFrame(timestamps, columns=["t"])
# try to filter based on time range
morning = df[8 <= df.t.hour < 12]
不幸的是,這並不工作:
Traceback (most recent call last):
File "test.py", line 9, in <module>
morning = df[8 <= df.t.hour < 12]
File "/usr/lib/python2.7/dist-packages/pandas/core/generic.py", line 1815, in __getattr__
(type(self).__name__, name))
AttributeError: 'Series' object has no attribute 'hour'
我試圖解決此問題:
morning = df[8 <= df.t.apply(lambda x:x.hour) < 12]
但是這也失敗了:
Traceback (most recent call last):
File "test.py", line 16, in <module>
morning = df[8 <= df.t.apply(lambda x:x.hour) < 12]
File "/usr/lib/python2.7/dist-packages/pandas/core/generic.py", line 676, in __nonzero__
.format(self.__class__.__name__))
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
任何人都可以提出一種方法,如何根據列值的屬性的值篩選DataFrame的行?
所以現在抱怨「Series」對象沒有屬性「dt」。我使用的是'0.13.1'版本 - 這個功能在更高版本中可用嗎? – moooeeeep
是的,您需要升級至少['0.15.0'](http://pandas.pydata.org/pandas-docs/version/0.17.0/whatsnew.html#dt-accessor) – EdChum