检查行是否包含nan pandas



我有数据框df,有5行3列,按日期索引:

OA_Year 0   1   2       
1968    12.0 2.0 NaN
1969    2.0 1.0 1.0
1970    8.0 4.0 2.0
1971    8.0 4.0 2.0
1972    0.0 3.0 1.0 

我正在尝试编写一个for循环,如果列2包含NaN的值,将添加列0和1中的条目。现在,我让结果等于一些更简单的东西来测试循环是否有效。

for i in range(5): 
if df.iloc[i, 2] == np.nan: 
result = np.nan
else: 
result = 'False'
print(result)

而不是获得NaN和'False'的列表,我只得到'False'的结果。这就是我想要得到的:

1968 NaN
1969 False
1970 False
1971 False
1972 False

我不完全确定我理解你需要什么,但通常-你不一定需要一个for循环来实现你想要的。例如,这将对列0和列1中列2不包含nan的值求和。

import pandas as pd
df = pd.DataFrame({'Year': [1990, 1991, 1992, 1993], '0': np.random.rand(4), '1': np.random.rand(4), '2': [np.nan, 1, 2, 1]})
df[~df['2'].isna()][['0','1']].sum(axis = 1)

由于需求不明确,请查看这是否是您想要的:

如果列2包含NaN的值,则将列01中的表项添加到列2中:

在这里,我们使用.fillna()01两列的和来填充2列中的NaN值:

df['2'] = df['2'].fillna(df['0'] + df['1'])

或使用:

df['2'] = df['2'].fillna(df[['0', '1']].sum(axis=1))
结果:

print(df)
OA_Year     0    1     2
0     1968  12.0  2.0  14.0
1     1969   2.0  1.0   1.0
2     1970   8.0  4.0   2.0
3     1971   8.0  4.0   2.0
4     1972   0.0  3.0   1.0

最新更新