Python 我怎样才能得到;for loop";正常工作?

Python 我怎样才能得到;for loop";正常工作?,python,pandas,for-loop,while-loop,Python,Pandas,For Loop,While Loop,我想用(上限值+下限值)/2填充缺失值。 如果列“A”有NaN,我想像上面那样计算,然后把值放到下一列“B”。 在我的原始数据集中,我不知道有多少个NAN。所以我应该检查一下一排有多少个N。 我想我的问题是“for循环”。 我一整天都在试图解决这个问题,但我做不到。 请检查我的代码并给我一些建议。 非常感谢你的工作和时间。 这是示例数据集和我的代码 df = pd.DataFrame([[np.NaN,np.NaN], [2,np.NaN],

我想用(上限值+下限值)/2填充缺失值。 如果列“A”有NaN,我想像上面那样计算,然后把值放到下一列“B”。 在我的原始数据集中,我不知道有多少个NAN。所以我应该检查一下一排有多少个N。 我想我的问题是“for循环”。 我一整天都在试图解决这个问题,但我做不到。 请检查我的代码并给我一些建议。 非常感谢你的工作和时间。 这是示例数据集和我的代码

df = pd.DataFrame([[np.NaN,np.NaN],
              [2,np.NaN],
              [8,np.NaN],
              [11,np.NaN],
              [8,np.NaN],
              [np.NaN,np.NaN],
              [np.NaN,np.NaN],
              [8,np.NaN],
              [8,np.NaN],
              [8,np.NaN],
              [8,np.NaN],
              [np.NaN,np.NaN],
              [np.NaN,np.NaN],
              [np.NaN,np.NaN],
              [8,np.NaN]],columns=list('AB'))

for r in range(df.shape[0]): 
    if math.isnan(df.A[r]) == True:
        nan_find = True
        have_nan = False
        start_row = r
        while nan_find == True:
            r = r + 1 
            if math.isnan(df.A[r]) == True:
                nan_find = True
                have_nan = True
            else:
                end_row = r-1
                nan_find = False
                r = r - 1
        for start_row in range(start_row, end_row):
            if start_row == 0:
                df.B[start_row] = (df.A[end_row+1])/2
            elif (start_row == df.shape[0]) | (end_row == df.shape[0]):
                df.B[start_row] = (df.A[start_row-1])/2
            else:
                df.B[start_row] = (df.A[start_row-1] + df.A[end_row+1])/2 
    else:
        pass

bool
值与
True
False
进行比较是不正确的。直接使用它们,例如,如果x==True:,则使用
,如果x:
,则使用
。将已知的
bool
True
进行比较并不比将比较结果与
True
进行比较更有意义,例如
if((x==True)==True)==True:
只需使用
if x:
即可。谢谢您的快速回复。然而,我不明白你的建议。对此我很抱歉。因为我是自学python的,所以我的代码技能和知识都很低,而且很糟糕。无论如何,非常感谢您的时间和工作。这并不能解决您的问题,这只是一个经验丰富的程序员不会犯的错误。基本上,只要去掉所有的
==True
,除非测试的值不是
bool
(即,如果它可能不是
True
False
,并且您测试的不仅仅是它的真值,但这是一种不寻常的情况)。例如,
nan\u-find
只能是
True
False
,因此将
当nan\u-find==True:
更改为
当nan\u-find:
类似地,
math.isnan()返回
True
False
,因此将
如果math.isnan(df.A[r])==True:
更改为
如果math.isnan(df.A[r]):
它更紧凑、更清晰。当你写
时,如果x==True:
,这意味着你不关心
x
的真值,而只关心它是否完全等于
True
,并且它可能有其他一些被认为是真的值,例如
123
“abc”
,如果
条件具有任何其他值,则不希望对其求值。所以从某种意义上说,如果你的意思是
如果x:
Oh~我明白了,那么这是一个不正确的注释。非常感谢你的善意解释。你的推荐对我很有帮助。再次感谢您,祝您度过愉快的一天!!