根据日期拆分数据框

时间:2017-09-15 02:35:37

标签: python pandas datetime

我正在尝试根据日期将数据框拆分为两个。这已解决了相关问题: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

3 个答案:

答案 0 :(得分: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: <class 'datetime.date'> type object 2008-04-12

基本上你会在datetime object

系列中尝试df

for more

答案 1 :(得分: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 :(得分:0)

这是一个解决方案: 添加标签&#34;日期&#34;到第一列的数据文件。

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]

双方必须属于同一类型。