首页 > 解决方案 > 为什么有 1 列的 std 而其他的是 nan?

问题描述

我有 DataFrame 看起来像这样,但形状(345,5)像这样

|something1|  something2|  numbers1| number2 |number3|
|----------|------------|----------|---------|-------|
| A        | str        |    45    | nan     |nan    |
|B         | str2       |   6      |  nan    | nan   |
| c        | str3       |   34     |  67     | 45    |
|D         | str4       |    56    |  45     | 23    |

我想只使用我的手动 std 函数获取数字列的 std 并保存在字典中,问题是我只为第一列得到这个结果:

{'number1': 18.59267328815305,
 'number2': nan,
 'number3': nan,
 'number4': nan}

这是我的代码:

std = {column:std_func(df[column].values) for column in df.columns}

标签: pythonpandasdataframenandictionary-comprehension

解决方案


熊猫可以处理这个,试试吧

df[['numbers1', 'numbers2', 'numbers3']].std()

默认情况下会跳过 NaN: https ://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.std.html

如果你想在 dict 中这样做,请执行以下操作:

df[['numbers1', 'numbers2', 'numbers3']].std().to_dict()

编辑:如果您对专门使用您的自定义标准偏差函数一无所知,请在应用之前从列中删除:

std = {column:std_func(df[column].dropna().values) for column in df.columns}

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.dropna.html


推荐阅读