如何在Python中使用2种在1列中填充NA的方法

如何在Python中使用2种在1列中填充NA的方法,python,python-3.x,na,Python,Python 3.x,Na,我有一个1列的数据框。 -在开始和结束时有许多NA值,我希望完全消除它们。 -同时,在两个可用值之间有一些NA值,我想用两个闭合可用值的平均值来填充它们。 为了便于说明,我在此附上图片供您想象。 我想不出任何解决办法。不知道是否有人能帮我 感谢您的帮助]首先,如果每个N/A都是字符串格式,请将其替换为np.nan。最简单的方法是在给定列上使用isnan,然后提取真正的索引(例如使用np.arange数组上的结果)。从那里,您可以使用for来迭代索引以检查它们是否是连续的,或者计算连续元素之间的距

我有一个1列的数据框。 -在开始和结束时有许多NA值,我希望完全消除它们。 -同时,在两个可用值之间有一些NA值,我想用两个闭合可用值的平均值来填充它们。 为了便于说明,我在此附上图片供您想象。 我想不出任何解决办法。不知道是否有人能帮我


感谢您的帮助]

首先,如果每个N/A都是字符串格式,请将其替换为
np.nan
。最简单的方法是在给定列上使用
isnan
,然后提取真正的索引(例如使用
np.arange
数组上的结果)。从那里,您可以使用for来迭代索引以检查它们是否是连续的,或者计算连续元素之间的距离以查找不等于1的元素

首先,如果每个N/A都是字符串格式,则将其替换为
np.nan
。最简单的方法是在给定列上使用
isnan
,然后提取真正的索引(例如在
np.arange
数组上使用结果)。从那里,您可以使用for来迭代索引以检查它们是否是连续的,或者计算连续元素之间的距离以查找不等于1的元素

试试这个,我用随机数复制了这个例子

import pandas as pd
import numpy as np

random_index = np.random.randint(0,100,size=(5, 1))
random_range = np.arange(10,15)
df = pd.DataFrame(np.random.randint(0,100,size=(100, 1)), columns=list('A'))
df.loc[10:15,'A'] = "#N/A"
for c in random_index:
    df.loc[c,"A"] = "#N/A"

// replacing start from here

df[df=="#N/A"]= np.nan
index  = list(np.where(df['A'].isna()))[0]
drops = []
for i in index:
    if pd.isnull(df.loc[(i-1),"A"]) is False  and pd.isnull(df.loc[(i+1),"A"]) is False:
        df.loc[i,"A"] =  (df.loc[(i-1),"A"]+df.loc[(i+1),"A"])/2
    else:
        drops.append(i)

df = df.drop(df.index[drops]).reset_index(drop=True)

试试这个,我用随机数复制了这个例子

import pandas as pd
import numpy as np

random_index = np.random.randint(0,100,size=(5, 1))
random_range = np.arange(10,15)
df = pd.DataFrame(np.random.randint(0,100,size=(100, 1)), columns=list('A'))
df.loc[10:15,'A'] = "#N/A"
for c in random_index:
    df.loc[c,"A"] = "#N/A"

// replacing start from here

df[df=="#N/A"]= np.nan
index  = list(np.where(df['A'].isna()))[0]
drops = []
for i in index:
    if pd.isnull(df.loc[(i-1),"A"]) is False  and pd.isnull(df.loc[(i+1),"A"]) is False:
        df.loc[i,"A"] =  (df.loc[(i-1),"A"]+df.loc[(i+1),"A"])/2
    else:
        drops.append(i)

df = df.drop(df.index[drops]).reset_index(drop=True)