【问题标题】:Pandas series to numpy array conversion errorPandas 系列到 numpy 数组转换错误
【发布时间】:2015-12-01 02:19:19
【问题描述】:

我有一个带有 foll 的熊猫系列。 value_counts输出():

NaN     2741
 197    1891
 127     188
 194      42
 195      24
 122      21

当我对这个系列执行 describe() 时,我得到:

df[col_name].describe()
count    2738.000000
mean      172.182250
std        47.387496
min         0.000000
25%       171.250000
50%       197.000000
75%       197.000000
max       197.000000
Name: SS_D_1, dtype: float64

但是,如果我尝试找到最小值和最大值,我会得到 nan 作为答案:

numpy.min(df[col_name].values)
nan

另外,当我尝试将其转换为 numpy 数组时,我似乎得到了一个只有 nan 的数组

numpy.array(df[col_name])

关于如何从 pandas 系列成功转换为 numpy 数组的任何建议

【问题讨论】:

  • df[col_name].values 将返回 numpy 数组。如果数据中有 NaN,它将使用 numpy.min 函数传播。这意味着如果存在 NaN,np.min 将始终将 NaN 作为分析器产生。试试南民docs.scipy.org/doc/numpy/reference/generated/…
  • 任何包含nan 的数组的min 也是nan。要忽略 nan 值,请尝试 np.nanmin(df[col_name].values)(或只是 df[col_name].min())。
  • 谢谢,但我也得到了一个 nan:numpy.array(df[col_name]).min()
  • 问题是你在调用 min() 方法之前将它转换为一个 numpy 数组。 pandas.Series.min() 等效于 np.nanmin 并忽略 nan 值,而 numpy.ndarray.min 等效于 np.min 并将为包含一个或多个 nans 的数组返回 nan
  • @user308827 - 从 pandas 的 0.24.0 开始 - 您可以使用 .array.to_numpy 访问 pandas Series 的支持数组 - 请在下面找到更新的答案。 pandas 0.24.x release notes

标签: python numpy pandas


【解决方案1】:

函数 np.min 和方法 np.ndarray.min 将始终为包含一个或多个 NaN 值的任何数组返回 NaN(这是标准的 IEE754 浮点行为)。

您可以使用np.nanmin,它在计算最小值时会忽略 NaN 值,例如:

np.nanmin(df[col_name].values)

一个更简单的选择是使用 pd.Series.min() 方法,它已经忽略了 NaN 值,即:

df[col_name].min()

我不知道为什么 numpy.array(df[col_name]) 会返回一个只包含 NaN 的数组,除非 df[col_name] 一开始就只包含 NaN。我认为这一定是由于您的代码中的其他错误造成的。

【讨论】:

    【解决方案2】:

    从 pandas 的 v 0.24.0 开始 - 您可以使用 .array.to_numpy 访问 pandas Series 的后备数组

    pandas 0.24.x release notes 引用:“Series.array 和 Index.array 已添加用于提取支持 Series 或 Index 的数组...我们尚未删除或弃用 Series.values 或 DataFrame.values,但我们 强烈推荐并使用 .array 或 .to_numpy() 代替

    ...当您需要存储在 Series 中的数据数组时,我们建议使用 Series.array,当您知道需要 NumPy 数组时,我们建议使用 Series.to_numpy()。"

    【讨论】:

      猜你喜欢
      • 2019-05-05
      • 2022-10-15
      • 2019-02-24
      • 2016-05-27
      • 2015-12-04
      • 2020-02-20
      • 2021-05-24
      • 2020-11-07
      • 2015-04-30
      相关资源
      最近更新 更多