我想计算一个pandas数据框,但是一些行包含缺失值。 对于这些缺失值,我想使用不同的算法。 假设:
- 如果B列包含值,则从B中减去A
- 如果B列没有包含值,则从C中减去A
import pandas as pd
df = pd.DataFrame({'a':[1,2,3,4], 'b':[1,1,None,1],'c':[2,2,2,2]})
df['calc'] = df['b']-df['a']
导致的结果是:
print(df)
a b c calc
0 1 1.0 2 0.0
1 2 1.0 2 -1.0
2 3 NaN 2 NaN
3 4 1.0 2 -3.0
方法1:使用.where
填充NaN行:
df['calc'].where(df['b'].isnull()) = df['c']-df['a']
这会导致SyntaxError: cannot assign to function call。
方法2:使用.iterrows()
填充NaN行:
for index, row in df.iterrows():
i = df['calc'].iloc[index]
if pd.isnull(row['b']):
i = row['c']-row['a']
print(i)
else:
i = row['b']-row['a']
print(i)
如果执行没有错误且计算正确,这些i
值将被打印到控制台:
0.0
-1.0
-1.0
-3.0
但是df['calc']
中的值没有被写入,数据框保持不变:
print(df['calc'])
0 0.0
1 -1.0
2 NaN
3 -3.0
如何正确地覆盖NaN
值?