【问题标题】:How to compare a list in python with another list and replace it with Nan?如何将python中的列表与另一个列表进行比较并将其替换为Nan?
【发布时间】:2021-12-13 08:00:11
【问题描述】:
delta_list = ['2','3','4',nan]
lb = ['1','2','3','4']
ub = ['5','6','7','8']

条件:

flag_1 = [np.where((np.array(delta_list) > np.array(lb)) & (np.array(delta_list) < np.array(ub)),0,1)]

这里:如果将 nan 与任何值进行比较,则它是 returning 1(很明显),但我希望它就像 delta_list 中的 comparison is with nan 一样,它应该始终是 return nan 而不是 flag_1 condition。 我如何实现这一目标? 我应该创建一个新列表并将索引与 delta_list 进行比较并用 nan 替换该索引值吗? 请帮忙!!

预期输出:flag_1 = ['1','1','1','1'] 所需输出:flag_1 =['1','1','1',nan]

nan 因为delta_list 4th element is nan 所以

[np.where((np.array(delta_list) > np.array(lb)) & (np.array(delta_list) < np.array(ub)),0,1)] 

如果在 delta_list 中遇到 nan,则根本不应该进行评估,它应该在我的 flag_1 列表中简单地 return nan

【问题讨论】:

  • 你能提供一个你预期输出的例子吗?你的解释对我来说没有意义。
  • 嘿,我刚刚添加了。你能查一下吗?
  • minimal reproducible example - 这只会给我一个关于 nan 的 NameError。你想达到什么目的?与其在文本中解释 - 显示输入,不如显示所需的输出并解释单个值为什么这个输出应该是它的输出。 jeszrale 似乎已经得到了你想要的东西 - 但我根本没有
  • 谢谢,我做到了。你现在可以检查吗?

标签: python pandas list


【解决方案1】:

如果数字不像10 是可能的比较字符串,所以使用numpy.selectNaNs 比较的新条件:

delta_list = ['2','3','4',np.nan]
lb = ['1','2','3','4']
ub = ['5','6','7','8']

m1 = (np.array(delta_list) > np.array(lb)) & (np.array(delta_list) < np.array(ub))
m2 = pd.isna(delta_list)

flag_1 = np.select([m2, m1], [np.nan, '1'], default='0')
print (flag_1)
['1' '1' '1' 'nan']

如果需要避免使用字符串nan,可以使用None

flag_1 = np.select([m2, m1], [None, '1'], default='0')
print (flag_1)
['1' '1' '1' None]

【讨论】:

  • key error as 0 is come as an error
猜你喜欢
  • 2021-06-10
  • 1970-01-01
  • 1970-01-01
  • 2021-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多