2017-09-15 97 views
0

我想根据日期将数据帧拆分为两个。这已经解决了相关的问题就在这里: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 

回答

1

从您的代码

where split_date is datetime.date(2008-04-12), I get this error

这里datetime.date()采用参数作为格式2008,4,12for 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

+0

虽然这种联系可以回答这个问题,最好是在这里有答案的主要部件,并提供连结以供参考。如果链接页面更改,则仅链接答案可能会失效。 - [来自评论](/ review/low-quality-posts/17338394) – Lundin

+0

有些解释会很好。 –

+1

(@Lundin和@ Sergio),谢谢你的好建议,我会记住所有的下一个方法。 –

0

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

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] 

双方都必须是同一类型。