Jon*_*nas 3 python nan dataframe pandas
我想计算 pandas 数据框,但某些行包含缺失值。对于那些缺失的值,我想使用不同的算法。可以说:
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']
Run Code Online (Sandbox Code Playgroud)
结果是:
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
Run Code Online (Sandbox Code Playgroud)
方法 1:使用以下方法填充 NaN 行.where:
df['calc'].where(df['b'].isnull()) = df['c']-df['a']
Run Code Online (Sandbox Code Playgroud)
这会导致SyntaxError:无法分配给函数调用。
方法 2:使用以下方法填充 NaN 行.iterrows():
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)
Run Code Online (Sandbox Code Playgroud)
执行时没有错误并且计算正确,这些i值将打印到控制台:
0.0
-1.0
-1.0
-3.0
Run Code Online (Sandbox Code Playgroud)
但值没有写入df['calc'],数据帧保持原样:
print(df['calc'])
0 0.0
1 -1.0
2 NaN
3 -3.0
Run Code Online (Sandbox Code Playgroud)
覆盖值的正确方法是什么NaN?
最后,我偶然发现.fillna:
df['calc'] = df['calc'].fillna( df['c']-df['a'] )
Run Code Online (Sandbox Code Playgroud)
完成工作!谁能解释一下上述两种方法有什么问题......?
| 归档时间: |
|
| 查看次数: |
3407 次 |
| 最近记录: |