当前位置: 首页 > 面试题库 >

将具有多个nan值的pandas系列化为一组可得出多个nan值

彭胡媚
2023-03-14
问题内容

我期望得到,set([nan,0,1])但我得到set([nan, 0.0, nan, 1.0])

>>> import numpy as np
>>> import pandas as pd
>>> l= [np.nan,0,1,np.nan]
>>> set(pd.Series(l))
set([nan, 0.0, nan, 1.0])
>>> set(pd.Series(l).tolist())
set([nan, 0.0, nan, 1.0])
>>> set(l)
set([nan, 0, 1])

问题答案:

并非所有的Nan都是相同的:

In [182]: np.nan is np.nan
Out[182]: True

In [183]: float('nan') is float('nan')
Out[183]: False

In [184]: np.float64('nan') is np.float64('nan')
Out[184]: False

因此,

In [178]: set([np.nan, np.nan])
Out[178]: {nan}

In [179]: set([float('nan'), float('nan')])
Out[179]: {nan, nan}

In [180]: set([np.float64('nan'), np.float64('nan')])
Out[180]: {nan, nan}

l包含np.nan,它们是相同的,所以

In [158]: set(l)
Out[158]: {nan, 0, 1}

pd.Series(l).tolist()包含np.float64('nan')不相同的:

In [160]: [type(item) for item in pd.Series(l).tolist()]
Out[160]: [numpy.float64, numpy.float64, numpy.float64, numpy.float64]

因此set不会将它们视为相等:

In [157]: set(pd.Series(l).tolist())
Out[157]: {nan, 0.0, nan, 1.0}

如果您有熊猫系列,请使用它的unique方法而不是set查找唯一值:

>>> s = pd.Series(l)
>>> s.unique()
array([ nan,   0.,   1.])


 类似资料:
  • 问题内容: 有没有一种首选的方法来将numpy数组的数据类型固定为int(int64或其他),同时仍将元素内部列出为? 特别是,我正在将内部数据结构转换为。在我们的结构中,我们有仍具有NaN的整数类型的列(但该列的dtype为int)。如果将其设为,似乎将所有内容重铸为float,但我们真的很想成为int。 有什么想法吗? 尝试过的事情: 我尝试在下使用该功能,但这并没有帮助。我还尝试使用带有Na

  • 是否有一种首选方法可以将数组的数据类型固定为(或或其他任何类型),同时仍将数组中的元素列为? 特别是,我正在将内部数据结构转换为熊猫数据帧。在我们的结构中,我们有仍然具有NaN的整型列(但是列的dtype是int)。如果我们将其作为DataFrame,它似乎会将所有内容重铸为浮点数,但我们真的希望成为。 思想? 尝试过的事情: 我尝试在熊猫下使用函数。DataFrame,与,这没有帮助。我还尝试使

  • 我正在考虑使用lambda和Pipeline。任何能给出提示的人都将不胜感激! 多谢!

  • 问题内容: 这个问题已经被问了很多遍了,而且似乎对其他人也有用,但是,当我从不同的DataFrame复制列(并且长度相同)时,我得到了值。 我需要这样 我尝试了以下方法 我得到以下内容 问题答案: 您的DataFrames的索引是不同的 (相应地,每列 的索引也不同 ),因此,当尝试将一个DataFrame的列分配给另一列时, pandas会尝试对齐索引,但这样做会失败,请插入NaN。 考虑以下示

  • 我从. csv文件读取数据到熊猫数据框如下。对于其中一个列,即,我想将列类型指定为。问题是系列缺少/空值。 当我在读取.csv时尝试将列强制转换为整数时,我得到: 或者,在阅读以下内容后,我尝试转换列类型,但这次我得到: 我如何处理这个问题?

  • 问题内容: 的文档说是 拥有类型为Not-a- Number(NaN)的常数。它等于所返回的值。 这似乎意味着还有其他人。如果是这样,我如何掌握它们,并且可以方便地完成吗? 明确地说,我想找到这样的值: 和 都是真的。 问题答案: 您需要而不是。 提取实际的二进制表示形式。 不会,它首先将all转换为默认值。 输出: