2013-03-27 135 views
3

我想在周日数据中读取数据,然后重新编制数据以填充周末数据。我尝试了下面的代码,但它不会重新索引数据。 Set_index产生一个长度错误信息。大熊猫,数据框set_index&reindexing

import pandas as pd 

def fill_dataframe(filename): 
    dataf = pd.read_csv(filename, header= None, index_col = [0]) 
return(dataf) 

rng = pd.date_range('10/1/2010', periods=61) 
date_rng = pd.DataFrame(rng,index = rng) 

data_1.reindex(date_rng, method = 'ffill') 

读入的数据有41行,生成的日期值有61行。有什么建议么?

data read in by csv (1st 7 rows) 
     X0  X1 
10/1/2010 71.27 
10/4/2010 70.33 
10/5/2010 72.94 
10/6/2010 74.15 
10/7/2010 71.40 
10/8/2010 72.58 
10/11/2010 72.66 

dates generated by rng in the second Data Frame (first 11 rows) 
         0 
2010-10-01 2010-10-01 00:00:00 
2010-10-02 2010-10-02 00:00:00 
2010-10-03 2010-10-03 00:00:00 
2010-10-04 2010-10-04 00:00:00 
2010-10-05 2010-10-05 00:00:00 
2010-10-06 2010-10-06 00:00:00 
2010-10-07 2010-10-07 00:00:00 
2010-10-08 2010-10-08 00:00:00 
2010-10-09 2010-10-09 00:00:00 
2010-10-10 2010-10-10 00:00:00 
2010-10-11 2010-10-11 00:00:00 

回答

3

只是由(1D)时间序列或者作为这个系列的作品(在0.10.1)重新编制索引:

data_1.reindex(rng, method = 'ffill') 
data_1.reindex(Series(rng, index=rng), method = 'ffill') 

随着date_rng为数据帧我得到类型错误:无法与0的比较时间戳,我怀疑这可能是一个错误,但我不能完全肯定预期的行为应该是什么...

+0

安迪,我已经运行了你建议的两种方法,并且没有得到任何重新索引。在10-01-13和10-04-10之间的任何一种方法下,数据帧data_1中都没有显示日期行10-02-10&10-03-10,这是我所期望的。 – 2013-03-28 02:04:50

+1

@DickEshelman你使用的是什么版本的熊猫? 0.10.1这些日期显示。 (我拷贝你的第一个DataFrame到剪贴板并使用'data_1 = pd.read_clipboard(sep ='',header = None,parse_dates = [0]).set_index(0)'。) – 2013-03-28 07:16:10

+0

Andy,我升级到0.10.1后你的回应。由于其他尝试使这个工作,我认为有一些与Pandas CSV阅读器的交互。我无法获得与剪贴板相同的结果。你介意用读者来尝试同样的事情吗?我会尝试剪贴板。 – 2013-03-28 15:50:44