【问题标题】:Split dataframe on the basis of date根据日期拆分数据框
【发布时间】:2018-02-24 03:10:14
【问题描述】:

我正在尝试根据日期将数据框拆分为两个。这已经解决了这里的一个相关问题:Split dataframe into two on the basis of date

我的数据框如下所示:

               abcde     col_b
2008-04-10  0.041913  0.227050
2008-04-11  0.041372  0.228116
2008-04-12  0.040835  0.229199
2008-04-13  0.040300  0.230301
2008-04-14  0.039770  0.231421

如何根据日期(例如 2008-04-12 之前及之后)拆分它?当我尝试这个时:

df.loc[pd.to_datetime(df.index) <= split_date]

split_datedatetime.date(2008-04-12),我收到此错误:

*** TypeError: <class 'datetime.date'> type object 2008-04-12

【问题讨论】:

    标签: python pandas datetime


    【解决方案1】:

    作为参考,如果您希望获取两个日期之间的数据框,您可以按照@R.A.Munna 的逻辑执行此操作:

    import datetime
    
    split_date_one = datetime.date(2019,9,26)
    split_date_two = datetime.date(2019,10,13)
    
    df= df[(pd.to_datetime(df[df.columns[0]]) >= split_date_one) & (pd.to_datetime(df[df.columns[0]]) <= split_date_two)]
    

    【讨论】:

      【解决方案2】:

      来自您的代码

      其中 split_date 是 datetime.date(2008-04-12),我收到此错误

      这里datetime.date() 将参数作为格式2008,4,12 for more。所以你应该写

      split_date = datetime.date(2008,4,12)
      

      当您对输入进行采样时,第一列没有名称,因此您可以像这样访问第一列

      df[(pd.to_datetime(df[df.columns[0]]) < split_date)]
      

      否则,您将列名称指定为 "date" 或任何您想要的名称

      df[(pd.to_datetime(df["date"]) < split_date)]
      

      最后

      TypeError: &lt;class 'datetime.date'&gt; type object 2008-04-12

      这种情况基本上发生了你试试这个datetime objectdf的系列

      for more

      【讨论】:

      • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
      • 一些解释会很好。
      • (@Lundin 和 @Sergio),感谢您的好建议,我会记住所有后续方法。
      • 这有效但抛出:“FutureWarning:比较日期时间系列与'datetime.date'。目前,'datetime.date'被强制转换为日期时间。未来熊猫不会强制,并且将引发 TypeError。要保留当前行为,请将 'datetime.date' 转换为带有 'pd.Timestamp' 的日期时间。split_date = datetime.date(2008,4,12)"
      【解决方案3】:

      这里有一个解决方案: 将标签“日期”添加到第一列的数据文件中。

      import pandas as pd
      df = pd.read_csv('data.csv')
      
      split_date ='2008-04-12'
      df_training = df.loc[df['Date'] <= split_date]
      df_test = df.loc[df['Date'] > split_date]
      print df_test
      

      当您进行比较时,例如

      df.loc[pd.to_datetime(df.index) <= split_date]
      

      两边必须是同一类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-28
        • 2016-06-24
        • 2021-10-04
        • 2021-08-16
        • 2022-10-18
        • 2021-09-16
        • 2022-01-13
        • 2017-05-18
        相关资源
        最近更新 更多