Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有相同周期数据的时间序列数据帧填充值_Python_Pandas - Fatal编程技术网

Python 具有相同周期数据的时间序列数据帧填充值

Python 具有相同周期数据的时间序列数据帧填充值,python,pandas,Python,Pandas,我有一个包含NaN值的数据框,我希望使用当月的信息填充缺少的数据 数据框如下所示: data = {'x':[208.999,-894.0,-171.0,108.999,-162.0,-29.0,-143.999,-133.0,-900.0], 'e':[0.105,0.209,0.934,0.150,0.158,'',0.333,0.089,0.189], } df = pd.DataFrame(data) df = pd.DataFrame(data, index =['20

我有一个包含NaN值的数据框,我希望使用当月的信息填充缺少的数据

数据框如下所示:

data = {'x':[208.999,-894.0,-171.0,108.999,-162.0,-29.0,-143.999,-133.0,-900.0],
       'e':[0.105,0.209,0.934,0.150,0.158,'',0.333,0.089,0.189],
}

df = pd.DataFrame(data)
df = pd.DataFrame(data, index =['2020-01-01', '2020-02-01',
                                '2020-03-01', '2020-01-01',
                                '2020-02-01','2020-03-01',
                               '2020-01-01','2020-02-01',
                               '2020-03-01'])
df.index = pd.to_datetime(df.index)
df['e'] =df['e'].apply(pd.to_numeric, errors='coerce')

现在我用
df=df.fillna(df['e'].mean())
来填充nan值,但它需要所有的列数据,它给我
0.27
有没有办法只使用同一个月的数据?结果应该是
0.56
尝试在index.month中分组,然后得到平均值(
转换后的

df.index = pd.to_datetime(df.index)
out = df.fillna({'e':df.groupby(df.index.month)['e'].transform('mean')})


也许您可以使用
interpolate()
而不是
fillna()
,但您必须首先对索引进行排序,即:

df.e.sort_index().interpolate()
输出:

2020-01-01    0.1050
2020-01-01    0.1500
2020-01-01    0.3330
2020-02-01    0.2090
2020-02-01    0.1580
2020-02-01    0.0890
2020-03-01    0.9340
2020-03-01    0.5615
2020-03-01    0.1890
Name: e, dtype: float64

默认情况下,使用线性插值,因此在出现一次NaN的情况下,您将获得平均值,缺失的值将替换为您预期的0.5615。但是,如果排序后当月的第一个样本是
NaN
,则结果将是上个月最后一个值和本月下一个值的平均值,但它适用于整月都有
NaN
,且没有任何平均值的情况,因此,根据您对同一个月的要求有多严格,或者丢失的值在整个数据帧中的分布情况,您可以接受或不接受此解决方案。

如果一个月的所有值都是
NaNs
,那么该解决方案的正确数据填充方式可能是0I,它会删除只有
NaNs
的行整整一个月。否则,插值可以用相当真实的值填充间隙。
2020-01-01    0.1050
2020-01-01    0.1500
2020-01-01    0.3330
2020-02-01    0.2090
2020-02-01    0.1580
2020-02-01    0.0890
2020-03-01    0.9340
2020-03-01    0.5615
2020-03-01    0.1890
Name: e, dtype: float64