首页 > 解决方案 > 使用 NaN 的 Python pandas DataFrame 操作

问题描述

在 pandas DataFrame 上,我试图计算两个特征之间的百分比变化。例如:

df = pd.DataFrame({'A': [100, 100, 100], 'B': [105, 110, 93], 'C': ['NaN', 102, 'NaN']})

我试图计算 之间的变化df['A'] - df['C'],但在我们有 'NaN' 的行上,使用来自 'B' 列的值。

预期结果:[-5, -2, 7] 因为,df['C'].loc[0]是 NaN,第一个值是100 - 105(来自“B”)。但第二个值是100 -102

标签: pandasnumpydataframenan

解决方案


我认为最简单的方法是用另一列替换缺失值Series.fillna

#if need replace strings NaN to missing values np.nan
df['C'] = pd.to_numeric(df.C, errors='coerce')

s = df['A'] - df['C'].fillna(df.B)
print (s)
0   -5.0
1   -2.0
2    7.0
dtype: float64

numpy.where通过以下方式测试缺失值的另一个想法Series.isna

a = np.where(df.C.isna(), df['A'] - df['B'], df['A'] - df['C'])
print (a)
[-5. -2.  7.]

s = df['A'] - np.where(df.C.isna(),  df['B'], df['C'])
print (s)
0   -5.0
1   -2.0
2    7.0
Name: A, dtype: float64

推荐阅读