【发布时间】:2019-11-29 17:04:06
【问题描述】:
我有一个大型数据框(>1000 行)的测量值。其中一列是 Fails (type str),其中包含测量失败的列。测量是否失败不仅仅基于值,所以我不能只替换所有负值,这就是为什么会有一个失败列
Cd Sn Sb Zn Fails
-1 -2 0.0 4 Cd Sn Sb
-2 0.0 -1 5 Cd Sn Sb
-3 -3 -2 6 Cd Sn Sb
1 2 3 4 Zn
如果元素失败,我需要用 nan 替换测量值。因此,对于 df 中的每一行,如果 col 失败,我需要设置 df.loc[row,col]=nan。
Cd Sn Sb Zn Fails
nan nan nan 4 Cd Sn Sb
nan nan nan 5 Cd Sn Sb
nan nan nan 6 Cd Sn Sb
1 2 3 nan Zn
什么是执行此操作的有效方法?
编辑:
我尝试使用上面的一个简单示例。 df 中还有更多列。实际上有 29 种不同的元素。这就是感兴趣的部分的样子
data.iloc[:,5:34]
Out[45]:
Se As Ga Ni ... Tl Pb U Ir
0 19.026755 3.290577 0.0 0.0 ... 0.619604 4.674604 0.030976 0.0
1 35.682812 55.108543 0.0 0.0 ... 4.217798 25.213694 0.216073 0.0
2 93.600473 187.171588 0.0 0.0 ... 12.480773 74.187307 0.647617 0.0
3 229.575678 560.092296 0.0 0.0 ... 37.041994 261.348135 1.926765 0.0
4 56.337625 14.344270 0.0 0.0 ... 0.375804 0.926559 0.004466 0.0
.. ... ... ... ... ... ... ... ... ...
871 NaN NaN NaN NaN ... NaN NaN NaN NaN
data["Fails"]
Out[50]:
0 Cd Sn Sb Cu Zn
1 Cd Sn Sb Cu Zn
2 Cd Sn Sb Cu Zn
3 Cd Sn Sb Cu Zn
4 Cd Sn Sb Cu Zn
871
当我尝试建议的解决方案时,我得到了比我应该得到的更多的 nans
Se As Ga Ni Mn ... Tl Pb U Ir
0 NaN NaN NaN NaN 0.715142 ... NaN NaN 0.030976 NaN
1 NaN NaN NaN NaN 2.295966 ... NaN NaN 0.216073 NaN
2 NaN NaN NaN NaN 6.654716 ... NaN NaN 0.647617 NaN
3 NaN NaN NaN NaN 20.567433 ... NaN NaN 1.926765 NaN
4 NaN NaN NaN NaN 0.285542 ... NaN NaN 0.004466 NaN
.. .. .. .. .. ... ... .. .. ... ..
871 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN
在前几行中,只有 Cd、Sn、Sb、Cu 和 Zn 应设置为 nan,其他所有内容应保持原样。
【问题讨论】:
标签: python python-3.x pandas