【发布时间】:2021-01-20 23:02:27
【问题描述】:
我想计算一个 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 值的正确方法是什么?
【问题讨论】:
标签: python pandas dataframe nan