Mit*_*har 4 python dataframe pandas
例如,我有一个数据框
df = pd.DataFrame([(np.nan, .32), (.01, np.nan), (np.nan, np.nan), (.21, .18)],
columns=['A', 'B'])
A B
0 NaN 0.32
1 0.01 NaN
2 NaN NaN
3 0.21 0.18
Run Code Online (Sandbox Code Playgroud)
我想减去列B从A
df['diff'] = df['A'] - df['B']
A B diff
0 NaN 0.32 NaN
1 0.01 NaN NaN
2 NaN NaN NaN
3 0.21 0.18 0.03
Run Code Online (Sandbox Code Playgroud)
如果其中一列是 ,则差值返回 NaN NaN。为了克服这一点,我使用fillna
df['diff'] = df['A'].fillna(0) - df['B'].fillna(0)
A B diff
0 NaN 0.32 -0.32
1 0.01 NaN 0.01
2 NaN NaN 0.00
3 0.21 0.18 0.03
Run Code Online (Sandbox Code Playgroud)
这解决了NaN进入 diff 列的问题,但对于索引 2,结果是0,而我想要差异,NaN因为 A 列和 B 列是NaN。
NaN如果两列都是 NaN,有没有办法明确告诉熊猫输出?
Series.sub与fill_value=0参数一起使用:
df['diff'] = df['A'].sub(df['B'], fill_value=0)
print (df)
A B diff
0 NaN 0.32 -0.32
1 0.01 NaN 0.01
2 NaN NaN NaN
3 0.21 0.18 0.03
Run Code Online (Sandbox Code Playgroud)
如果需要替换 NaN 来0添加Series.fillna:
df['diff'] = df['A'].sub(df['B'], fill_value=0).fillna(0)
print (df)
A B diff
0 NaN 0.32 -0.32
1 0.01 NaN 0.01
2 NaN NaN 0.00
3 0.21 0.18 0.03
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |