【问题标题】:Filtering list in python based on condition [duplicate]根据条件在python中过滤列表[重复]
【发布时间】:2018-03-13 14:49:05
【问题描述】:

我有以下实现,将 CSV 文件转换为一行 numpy 数组:

results = []
with open(file2) as csvfile:
    reader = csv.reader(csvfile, quoting=csv.QUOTE_NONNUMERIC) 
# change contents to floats
    for row in reader: # each row is a list
        results.append(row)
        print(numpy.percentile(results, perc, axis = None))
        perc_value = numpy.percentile(results, perc, axis = None)

现在的想法是,基于用户提供的返回某个值的百分位数 - 比如说 100,我想从数组中删除所有低于 100 的条目。

so example results is [1, 50, 200, 500, 1000, 2000]
perc_value = 100
end result should be [200, 500, 1000, 2000]

我尝试了多次尝试,但要么我收到一个布尔错误,要么是该条件不能应用于列表,有什么想法吗?

我尝试了以下操作:

       for i in range (len(results)):
           if results[i] > perc_value: results.pop(i)
       print (results)

错误信息: ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()

【问题讨论】:

  • 你能分享你试过的代码和错误信息吗?
  • edit问题并将您正确格式化的代码粘贴到那里。
  • 完成,已编辑,谢谢!
  • 试试results[numpy.where(result > perc_value)]
  • TypeError 出现以下类型错误:列表索引必须是整数或切片,而不是元组

标签: python arrays numpy boolean


【解决方案1】:

有时人们认为复杂...保持简单并在流程的早期选择...

行 = 字符串。

# arbitrary taken selector values and char.
key      = 100 
position = 4
splitter = '.'

for row in reader: # row as a string.

    # preprocess input
    string_row = str(row)
    row_data = string_row.split (splitter)

    if int(row_data[position]) == key: # selection is done here

        results.append(row)
        print(numpy.percentile(results, perc, axis = None))
        perc_value = numpy.percentile(results, perc, axis = None)

行 = 带有变量的列表:

# arbitrary taken selector values and char.
key      = 100 
position = 4
splitter = '.'

for row in reader: # each row is a list

    if int(row[position]) == key: # selection is done here

        results.append(row)
        print(numpy.percentile(results, perc, axis = None))
        perc_value = numpy.percentile(results, perc, axis = None)

【讨论】:

  • 会检查,但我不确定我是否得到你的代码,这里的想法是根据用户从同一个大列表中输入的百分比 (%25) 计算百分比值(例如 100)然后通过删除低于百分位值的值来操作相同的列表
  • 我在 key 上取的值是任意的。如果你需要计算实际值...或者范围(返回两个选择器值),它可以是一个小函数。然后在后一种情况下,它的选择器将是 if int(row[position]) in range(value1, value2):
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-03
  • 1970-01-01
相关资源
最近更新 更多