我正在尝试使用熊猫处理每天的数据。以下是我的代码,数据和当前输出。但是,函数getUniqueDates()必须遍历整个df才能获得列表中的唯一日期,如下所示。是否有任何简单有效的方法来获取可以传递给processDataForEachDate()函数的每日数据。遍历大列表非常耗时。在本示例中,为了简化起见,我精简了各列。
data = {'date': ['2014-05-01 18:47:05.069722', '2014-05-01 18:47:05.119994', '2014-05-02 18:47:05.178768', '2014-05-02 18:47:05.230071', '2014-05-02 18:47:05.230071', '2014-05-02 18:47:05.280592', '2014-05-03 18:47:05.332662', '2014-05-03 18:47:05.385109', '2014-05-04 18:47:05.436523', '2014-05-04 18:47:05.486877'],
'noOfJobs': [34, 25, 26, 15, 15, 14, 26, 25, 62, 41]}
df = pd.DataFrame(data, columns = ['date', 'noOfJobs'])
df = df.astype(dtype= {"date":'datetime64[ns]'})
print(df)
#Ouput====================================
date noOfJobs
0 2014-05-01 18:47:05.069722 34
1 2014-05-01 18:47:05.119994 25
2 2014-05-02 18:47:05.178768 26
3 2014-05-02 18:47:05.230071 15
4 2014-05-02 18:47:05.230071 15
5 2014-05-02 18:47:05.280592 14
6 2014-05-03 18:47:05.332662 26
7 2014-05-03 18:47:05.385109 25
8 2014-05-04 18:47:05.436523 62
9 2014-05-04 18:47:05.486877 41
def getUniqueDates():
todaysDate = datetime.datetime.today().strftime('%Y-%m-%d')
listOfDates=[]
for c,r in df.iterrows():
if r.date.date() != todaysDate:
todaysDate=r.date.date()
listOfDates.append(todaysDate)
return listOfDates
listOfDates = getUniqueDates()
print(listOfDates)
# Output====================================
[datetime.date(2014, 5, 1),
datetime.date(2014, 5, 2),
datetime.date(2014, 5, 3),
datetime.date(2014, 5, 4)]
for eachDate in listOfDates:
processDataForEachDate(eachDate)
答案 0 :(得分:1)
您可以使用以下命令访问唯一日期的NumPy数组:
>>> df.date.dt.date.unique()
array([datetime.date(2014, 5, 1), datetime.date(2014, 5, 2),
datetime.date(2014, 5, 3), datetime.date(2014, 5, 4)], dtype=object)
dt
是pandas系列df.date
的 accessor方法。基本上,这是一个类,它充当一堆与日期时间相关的方法的类似于属性的接口。好处是它是矢量化的(与来自Pandas开发人员的.iterrows()
进行比较,请参见here),并且访问器方法也使用“缓存的属性”设计: