使用Python / Pandas Dataframe每天提供的唯一数据

时间:2018-07-11 19:57:34

标签: python pandas dataframe

我正在尝试使用熊猫处理每天的数据。以下是我的代码,数据和当前输出。但是,函数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)

1 个答案:

答案 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),并且访问器方法也使用“缓存的属性”设计: