Pandas,数据帧set_index和重新索引

3

我希望能读取工作日的数据,然后重新索引数据以用星期五的数据填充周末。我尝试过以下代码,但它无法重新索引数据。set_index产生了长度错误消息。

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
1个回答

3

重新索引只使用(1D)时间序列或作为Series,这在0.10.1中可以工作:

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

使用DataFrame中的date_rng时,我遇到了TypeError: Cannot compare Timestamp with 0的错误。我怀疑这可能是一个bug,但我不确定预期的行为应该是什么...


Andy,我已经运行了你建议的两种方法,但没有得到任何重新索引。在任何一种方法下,数据框data_1中10-01-13至10-04-10之间的日期行10-02-10和10-03-10都没有显示出来,这正是我所预期的。 - Dick Eshelman
1
@DickEshelman 你使用的是哪个版本的pandas?0.10.1这些日期会显示出来。(我将您的第一个DataFrame复制到剪贴板中,并使用data_1 = pd.read_clipboard(sep=' ', header=None, parse_dates=[0]).set_index(0)。) - Andy Hayden
Andy,我在你的回复后升级到了0.10.1版本。由于之前尝试让它工作的其他尝试,我认为这与Pandas CSV读取器有一些交互。我无法像你使用剪贴板时得到相同的结果。你介意尝试使用读取器做同样的事情吗?我会尝试使用剪贴板。 - Dick Eshelman
read_clipboard 应等同于 read_csv,你正在使用 parse_dates=[0] 解析日期吗? - Andy Hayden
1
谢谢Andy,你的读取参数是关键,没有“set_index(0)”重新索引将无法工作。 - Dick Eshelman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接