【问题标题】:Replace Numpy NaN with string in list with strings用字符串替换 Numpy NaN 与列表中的字符串
【发布时间】:2017-08-21 07:42:50
【问题描述】:

我有一个包含字符串元素的列表,以及几个 NaN numpy 浮点数。例如

l=['foo', 'bar', 'baz', 'nan']

如何将浮点数nan 替换为字符串missing

我发现的大多数答案都与 pandas DataFrame 中的这个问题有关。


尝试 1:
for x in l:
    x=x.replace('nan', 'missing')

AttributeError: 'float' object has no attribute 'replace'

尝试 2:

for x in l:
   if str(x)=='nan':
       x=str(x)

命令执行,但没有任何变化。


由 cmets 建议:
  1. ['missing' if x is 'nan' else x for x in l]
  2. ['missing' if x is np.isnan else x for x in l]
  3. ['missing' if x is np.nan else x for x in l]

命令执行,但没有任何变化。

【问题讨论】:

  • l = [text if text != 'nan' else 'missing' for text in l] 是一种方法。
  • 请注意,您的代码示例包含一个字符串,而不是 (numpy) NaN。
  • 如果您的列表包含实际 NaN 和字符串,这可以与列表理解一起使用:l = [text if not np.isnan(text) else 'missing' for text in l]
  • 它在我的列表中显示为nan。当我想更改时,它会给出一个浮动错误。
  • "当我想更改时,它会给出一个浮动错误。":这没有意义:显示您的代码尝试和回溯。

标签: python string list replace nan


【解决方案1】:

我认为你的 NaN 格式不正确(注意输出的是 nan 而不是“nan”)。评论中的答案应该有效:

>>> import numpy as np
>>> l=['foo', 'bar', 'baz', np.nan]
>>> print l
['foo', 'bar', 'baz', nan]
>>> l_new=['missing' if x is np.nan else x for x in l]
>>> print l_new
['foo', 'bar', 'baz', 'missing']

对于您当前的问题,或许可以做出以下解决方案:

my_nan=l['some_index_with_nan']
l_new=['missing' if x is my_nan else x for x in l]

【讨论】:

    猜你喜欢
    • 2013-05-01
    • 2021-05-22
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    • 2022-06-14
    • 1970-01-01
    相关资源
    最近更新 更多