【问题标题】:Problems with np.where and lists with stringsnp.where 和字符串列表的问题
【发布时间】:2020-09-27 11:53:19
【问题描述】:

我有 3 个列表,其中之一是:

x_axis = ["01-01", "01-02", "01-03"] 

等等。 x_axis 列表长度为 377。

我还有一个清单:

y_axis = ["01-01","01-03","01-05"]

等等。 y_list 的长度为 167。

第三个列表对应于带有特定编号的列表x_axis,其中:

hour24 = ["50","0","99"]

等等。 hour24的长度与x_axis相同,x_axis中的日期对应hour24中的数字。

我想要做的是从 hour24 列表中提取与 y_axis 中的日期相对应的数字。这意味着并非所有日期都将包括在内。我想要一个 new_hour24 列表,其中包含与 y 轴日期相同的特定数字。这里的问题是 x_axis 列表包含所有日期,而 y_axis 列表只包含一些选定的日期。

我想做什么:

我尝试用零扩展 y_axis 列表以包含与 x_axis 相同的长度:

for i in range(210):
        y_axis.append("0")

一旦长度相同,我尝试使用 if/else 和 np.where numpy as:

new_hour24 = []

for i in range(0, len(x_axis)):
        if(np.where((x_axis[i]==y_axis[i]))):
             new_hour24.append(hour24[i])
        else:
             continue

但是,由于某种原因,这不起作用,我的新列表 new_hour24 包含所有原始值,就像它跳过 np.where 事实并无论如何都附加了所有值一样。

有人知道我该如何解决这个问题吗?

编辑

预期的输出是一个长度为 167 的 new_hour24 列表。列表 new_hour24 中的数字对应于 y_list 中的日期。

【问题讨论】:

  • 你能发布预期的输出吗
  • 我最后加了一句。不知道怎么解释呢
  • 这是您发布的示例的输出['50', '99']
  • 是的,这些应该是前 2 个输出。

标签: python string list numpy if-statement


【解决方案1】:

您可以使用np.isin

new_hour24 = hour24[np.isin(x_axis, y_axis)]
print(new_hour24)

输出:

['50' '99']

【讨论】:

  • 我试过了,然后我收到:TypeError:只有整数标量数组可以转换为标量索引。我忘了提到 x_list 不仅是数字,而且列表中的某些地方还显示“MM.DD”。而 y_list 只是数字。不知道是不是这个问题
  • hour24转换为numpy数组hour24 = np.array(hour24)就可以了
  • 很好,@newtoprogramming。如果上述答案有帮助,请接受:这将有助于社区的其他成员知道这是您问题的解决方案。我还向帮助过您的会员表示“感谢您的帮助”(查看this webpage 了解更多信息)。
猜你喜欢
  • 1970-01-01
  • 2010-11-26
  • 2013-02-12
  • 2023-02-14
  • 2018-10-08
  • 2016-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多