pandas - 使用 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
。
解决方案
我认为最简单的方法是用另一列替换缺失值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
推荐阅读
- c++ - Qt 4.8.7 内存伪影
- javascript - 使用 Moment.js 为 ISO 8601 日期创建条件
- javascript - 在EXTJS中单击树形面板的最后一个子元素时如何触发事件
- c++ - c++ 我是否需要手动删除一个指向另一个具体类型的 void* 指针?
- ios - 在 MKMapView 上显示 PHAsset
- json - 如何使用 pl/pgsql 将具有动态元素名称的 JSON 数据转换为行?
- python - OptionsMenu 仅显示每个列表中的第一项?
- qt - Qt Creator 在启动几分钟后没有响应
- python - 在运行 Pandas 代码时,将 Dask 与 Python 一起使用会导致问题
- awk - 为什么 awk 不打印所有记录?