需要在python中的na值之前用过去的三个值填充NA值

时间:2018-05-03 09:12:40

标签: python-3.x time-series na forecasting fillna

需要用NA的过去三个值

填充NA值

这是我的数据集

RECEIPT_MONTH_YEAR NET_SALES

0 2014-01-01 818817.20

1 2014-02-01 362377.20

2 2014-03-01 374644.60

3 2014-04-01 NA

4 2014-05-01 NA

2014-06-01 NA

6 2014-07-01 NA

7 2014-08-01 46382.50

8 2014-09-01 55933.70

9 2014-10-01 292303.40

10 2014-10-01 382928.60

3 个答案:

答案 0 :(得分:0)

此数据集是.csv文件或数据框。这个NA是'NaN'还是字符串?

import pandas as pd
import numpy as np
df=pd.read_csv('your dataset',sep=' ')
df.replace('NA',np.nan)
df.fillna(method='ffill',inplace=True) 

你提到了关于3个值的平均值的东西......上面只是向前填充了NaN开始之前的最后一个观察。这通常是预测的好方法(在某些情况下,如果持久性很重要,则优于采取手段)

 ind = df['NET_SALES'].index[df['NET_SALES'].apply(np.isnan)]
 Meanof3 = df.iloc[ind[0]-3:ind[0]].mean(axis=1,skipna=True)
 df.replace('NA',Meanof3)

如果有关数据集的更多信息是已知的,也许答案可以推广和改进 - 例如,如果你总是想在任何NA之前取最后3次测量的平均值。以上将允许您检查NaNs的索引,然后取平均值3,同时忽略任何NaN

答案 1 :(得分:0)

这很简单,但它正在运作

df_data.fillna(0,inplace=True)
for i in range(0,len(df_data)):
if df_data['NET_SALES'][i]== 0.00:
    condtn = df_data['NET_SALES'][i-1]+df_data['NET_SALES'][i-2]+df_data['NET_SALES'][i-3]
    df_data['NET_SALES'][i]=condtn/3

答案 2 :(得分:0)

你可以使用fillna(假设你的NA已经是np.nan)和滚动平均值:

config/packages/doctrine.yaml

输出:

import pandas as pd
import numpy as np

df = pd.DataFrame([818817.2,362377.2,374644.6,np.nan,np.nan,np.nan,np.nan,46382.5,55933.7,292303.4,382928.6], columns=["NET_SALES"])

df["NET_SALES"] = df["NET_SALES"].fillna(df["NET_SALES"].shift(1).rolling(3, min_periods=1).mean())

如果你想包含估算值,我猜你需要使用循环。