Python 我怎样才能得到;for loop";正常工作?
我想用(上限值+下限值)/2填充缺失值。 如果列“A”有NaN,我想像上面那样计算,然后把值放到下一列“B”。 在我的原始数据集中,我不知道有多少个NAN。所以我应该检查一下一排有多少个N。 我想我的问题是“for循环”。 我一整天都在试图解决这个问题,但我做不到。 请检查我的代码并给我一些建议。 非常感谢你的工作和时间。 这是示例数据集和我的代码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],
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~我明白了,那么这是一个不正确的注释。非常感谢你的善意解释。你的推荐对我很有帮助。再次感谢您,祝您度过愉快的一天!!