我想计算一个 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
值的正确方法是什么?
最佳答案
最后,我偶然发现了.fillna
:
df['calc'] = df['calc'].fillna( df['c']-df['a'] )
完成任务!谁能解释一下上述两种方法有什么问题...?
关于python - Pandas :替换缺失的数据框值/条件计算:fillna,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65811195/