为什么 std 为 1 列而其他列为 nan?

why having std for 1 column and others are 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}

Pandas 可以解决这个问题,试试

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

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

如果你想在字典中使用这个,那么做:

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