Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何按天分割数据帧或系列(可能使用迭代器)_Python_Indexing_Pandas_Time Series - Fatal编程技术网

Python 如何按天分割数据帧或系列(可能使用迭代器)

Python 如何按天分割数据帧或系列(可能使用迭代器),python,indexing,pandas,time-series,Python,Indexing,Pandas,Time Series,我有一个很长的时间序列 import pandas as pd index=pd.date_range(start='2012-11-05', end='2012-11-10', freq='1S').tz_localize('Europe/Berlin') df=pd.DataFrame(range(len(index)), index=index, columns=['Number']) 现在,我想提取每天的所有子数据帧,以获得以下输出: df_2012-11-05: data frame

我有一个很长的时间序列

import pandas as pd
index=pd.date_range(start='2012-11-05', end='2012-11-10', freq='1S').tz_localize('Europe/Berlin')
df=pd.DataFrame(range(len(index)), index=index, columns=['Number'])
现在,我想提取每天的所有子数据帧,以获得以下输出:

df_2012-11-05: data frame with all data referring to day 2012-11-05
df_2012-11-06: etc.
df_2012-11-07
df_2012-11-08
df_2012-11-09
df_2012-11-10
避免检查index.date==give_date是否非常慢,最有效的方法是什么。此外,用户不知道框架中的天数范围

有没有任何提示可以使用迭代器执行此操作

我目前的解决方案是这样的,但它不是那么优雅,有两个问题定义如下:

time_zone='Europe/Berlin'
# find all days
a=np.unique(df.index.date) # this can take a lot of time
a.sort()
results=[]
for i in range(len(a)-1):
    day_now=pd.Timestamp(a[i]).tz_localize(time_zone)
    day_next=pd.Timestamp(a[i+1]).tz_localize(time_zone)
    results.append(df[day_now:day_next]) # how to select if I do not want day_next included?

# last day
results.append(df[day_next:])
这种方法存在以下问题:

  • a=np.unique(df.index.date)可能需要很多时间
  • df[day_now:day_next]包括下一天,但我需要将其排除在范围之外
    • 也许是groupby

      DFList = []
      for group in df.groupby(df.index.day):
          DFList.append(group[1])
      
      应提供数据帧列表,其中每个数据帧都是一天的数据

      或者在一行中:

      DFList = [group[1] for group in df.groupby(df.index.day)]
      

      一定要爱蟒蛇

      如果您想按日期分组(又名:年+月+日),则使用
      df.index.date

      result = [group[1] for group in df.groupby(df.index.date)]
      

      As
      df.index.day
      将使用一个月中的一天(即:从1到31)进行分组,如果输入数据帧日期延长到多个月,则可能会导致不良行为。

      最好按df.index.date进行分组,因为这样我们肯定会选择不同的日期,使用index.day 2001年12月2日和2002年1月2日将是同一天。不幸的是,使用date计算显然需要更多的时间。我认为熊猫中缺少的是通过不同的时间/日期类别进行快速选择,这可能需要建立一些隐修索引,就像在数据库中一样,df.groupby([df.index.year,df.index.month,df.index.day])在确保正确区分日期的同时,将速度提高90%,但它会根据日期的字符串表示形式进行分组。不是基于日期的日期时间表示。这应该是公认的答案,按天分组通常不是您想要的。公认的答案是错误的。请把这个答案投上一票,因为如果你正在读这篇文章并且你同意的话,我就不能投上一票