Python 3.x 是否有python函数替换时间序列中的NaN值?

Python 3.x 是否有python函数替换时间序列中的NaN值?,python-3.x,pandas,Python 3.x,Pandas,我有两个不同的时间序列,不同的大小。我想用时间序列2的同一个月的最后一个可用值替换时间序列1的NaN值。有没有一个函数可以做到这一点? 以下是我的时间范围: timerange = pd.date_range('1/1/1', periods = 9, freq = 'D') d1_t是我的第一个时间序列: d1_t = pd.Series(np.random.randn(len(timerange)), timerange) 我将添加一个Na: d1_t['2001-01-03'] = n

我有两个不同的时间序列,不同的大小。我想用时间序列2的同一个月的最后一个可用值替换时间序列1的NaN值。有没有一个函数可以做到这一点? 以下是我的时间范围:

timerange = pd.date_range('1/1/1', periods = 9, freq = 'D')
d1_t是我的第一个时间序列:

d1_t = pd.Series(np.random.randn(len(timerange)), timerange)
我将添加一个Na:

d1_t['2001-01-03'] = np.nan
我的第二个时间系列是d2:

我希望当前具有NaN值的d1_t['2001-01-03']被d2_t['2001-01-02']替换为使用方法fillna

d1_t = d1_t.fillna(d2_t)
这将填充同一天的数据

我错过了OP希望有一天用数据替换的机会。关于这一点,请参见@ansev的答案

使用方法fillna

d1_t = d1_t.fillna(d2_t)
这将填充同一天的数据

我错过了OP希望有一天用数据替换的机会。关于这一点,请参见@ansev的答案

使用+。 仅当序列的索引完全相同时:

d1_t=d1_t.fillna(d2_t.shift())
print(d1_t)
2001-01-01    0.268759
2001-01-02   -0.064546
2001-01-03   -1.567730
2001-01-04   -0.770255
2001-01-05    0.479366
2001-01-06   -0.305752
2001-01-07    1.489243
2001-01-08    0.397007
2001-01-09    0.025405
Freq: D, dtype: float64
使用+。 仅当序列的索引完全相同时:

d1_t=d1_t.fillna(d2_t.shift())
print(d1_t)
2001-01-01    0.268759
2001-01-02   -0.064546
2001-01-03   -1.567730
2001-01-04   -0.770255
2001-01-05    0.479366
2001-01-06   -0.305752
2001-01-07    1.489243
2001-01-08    0.397007
2001-01-09    0.025405
Freq: D, dtype: float64

我们可以使用fillna+groupby.transform'last'…你能展示一下你的序列吗?那么,让我们假设这是我的时间范围:timerange=pd.date\u range'1/1/1',periods=9,freq='D',d1\u t是我的第一个时间序列:d1\u t=pd.Seriesnp.random.randnlentimerange,timerange,我要添加一个Na:d1\u t['2001-01-03']=np.nan,我的第二个时间序列是d2_t,d2_t=pd.Seriesnp.random.randnlentimerange,timerange,我希望d1_tt['2001-01-03'],当前具有NaN值,被d2_t['2001-01-02']替换。明白了吗?我肯定有办法做你想做的事。但是,您需要提供一个。请相应地回答你的问题。请检查我的答案@MahsemWe可以使用fillna+groupby.transform'last'…你能展示一个你的系列的例子吗?那么,让我们假设这是我的时间范围:timerange=pd.date\u range'1/1/1',periods=9,freq='D',d1\t是我的第一个时间系列:d1\u t=pd.Seriesnp.random.randentimerange,timerange,我要添加一个Na:d1_t['2001-01-03']=np.nan,我的第二个时间序列是d2_t,d2_t=pd.Seriesnp.random.randnlentimerange,timerange,我想要d1_tt['2001-01-03'],当前有nan值,被d2_t['2001-01-02']替换。明白了吗?我肯定有办法做你想做的事。但是,您需要提供一个。请回答相应的问题。请检查我的答案@MahsemWellcome to stackoverflow!。他说:我希望d1_t['2001-01-03'],目前具有NaN值,被d2_t['2001-01-02']取代。这将在同一天填入相应的值抱歉,错过了。请参阅使用shiftWellcome to stackoverflow!的@ansev answer!。他说:我希望d1_t['2001-01-03'],目前具有NaN值,被d2_t['2001-01-02']取代。这将在同一天填入相应的值抱歉,错过了。请参阅使用shiftThanks ansev的@ansev answer,我知道我的示例包含两个长度相同的时间序列,但如果时间序列来自不同的长度,该怎么办?有解决办法吗@ansev这真的取决于序列的精确性感谢ansev,我知道我的示例包括两个长度相同的时间序列,但是如果时间序列的长度不同呢?有解决办法吗@Ansev这真的取决于这个系列到底是怎样的