我有一个包含单列 ID 的数据框,所有其他列都是我想要计算 z 分数的数值。这是其中的一个小节:
ID Age BMI Risk Factor
PT 6 48 19.3 4
PT 8 43 20.9 NaN
PT 2 39 18.1 3
PT 9 41 19.5 NaN
我的一些列包含 NaN 值,我不想将其包含在 z 分数计算中,因此我打算使用针对此问题提供的解决方案:如何使用nans对pandas列进行zscore标准化?
df['zscore'] = (df.a - df.a.mean())/df.a.std(ddof=0)
我有兴趣将此解决方案应用于除 ID 列之外的所有列,以生成新的数据框,我可以使用以下命令将其保存为 Excel 文件
df2.to_excel("Z-Scores.xlsx")
所以基本上;如何计算每列的 z 分数(忽略 NaN 值)并将所有内容推送到新的数据框中?
旁注:pandas 中有一个叫做“索引”的概念,这让我感到害怕,因为我不太理解它。如果索引是解决此问题的关键部分,请简化对索引的解释。
Using Scipy Z 分数功能:
df = pd.DataFrame(np.random.randint(100, 200, size=(5, 3)), columns=['A', 'B', 'C'])
df
| | A | B | C |
|---:|----:|----:|----:|
| 0 | 163 | 163 | 159 |
| 1 | 120 | 153 | 181 |
| 2 | 130 | 199 | 108 |
| 3 | 108 | 188 | 157 |
| 4 | 109 | 171 | 119 |
from scipy.stats import zscore
df.apply(zscore)
| | A | B | C |
|---:|----------:|----------:|----------:|
| 0 | 1.83447 | -0.708023 | 0.523362 |
| 1 | -0.297482 | -1.30804 | 1.3342 |
| 2 | 0.198321 | 1.45205 | -1.35632 |
| 3 | -0.892446 | 0.792025 | 0.449649 |
| 4 | -0.842866 | -0.228007 | -0.950897 |
如果数据框的并非所有列都是数字,那么您可以使用以下命令将 Z 分数函数仅应用于数字列:select_dtypes
功能:
# Note that `select_dtypes` returns a data frame. We are selecting only the columns
numeric_cols = df.select_dtypes(include=[np.number]).columns
df[numeric_cols].apply(zscore)
| | A | B | C |
|---:|----------:|----------:|----------:|
| 0 | 1.83447 | -0.708023 | 0.523362 |
| 1 | -0.297482 | -1.30804 | 1.3342 |
| 2 | 0.198321 | 1.45205 | -1.35632 |
| 3 | -0.892446 | 0.792025 | 0.449649 |
| 4 | -0.842866 | -0.228007 | -0.950897 |
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)