Выберите и удалите несколько строк из индексированного столбца

#python-3.x #numpy

#python-3.x #numpy

Вопрос:

Я пытаюсь очистить свои данные, у меня более 500 тыс. строк. Я хочу выбрать все столбцы, в которых есть «H» И «F», просмотреть каждую строку и удалить всю строку, если значение «H» или «F» больше 2000 или меньше -150. Я написал код, который удаляет строки с этим условием из всех столбцов, но я хочу указать столбцы «H» И «F».

Я включил свой код и образец данных.

Спасибо

 def load_csv(path, d_keyls):
    f = open(path, 'r')
    data = {}
    data["names"] = f.readline().replace('n', '').split(',')
    indexes = [data["names"].index(el) for el in data["names"] if el[0] in d_keyls]

    for line in f:
        row = line.replace('n', '').split(',')
        PartId = row[-2]
        T = row[-1]
        app_row = row[:-2]
        app_row1 = [float(num) if num != "" else 0 for num in app_row ]
        
        key_to_del = False

        for num in app_row:
            if num > 400 or num < -150:
                key_to_del = True

        if key_to_del:
            pass
        else:
            if T in data:
                if PartId in data[T]:
                    data[T][PartId].append(app_row)
                else:
                    data[T][PartId] = [app_row]
            else:
                data[T] = {PartId: [app_row]}


    for key in data:
        if key != "names":
            #Converting native Python 2d list to numpy.array
            for pid in data[key]:
                data[key][pid] = np.array(data[key][pid], dtype='float_')
    f.close()
    return data

input_file = 'init.csv'
export_file = 'Query_celn.csv'

d_keyls = ["H","F"]

data = load_csv(input_file, d_keyls)
  

введите описание изображения здесь

Комментарии:

1. Вы, вероятно, увидите большую пользу от библиотеки Pandas, которая практически является оболочкой, упрощающей работу со структурами numpy и предоставляющей такие функции, как загрузка CSV и фильтрация по некоторым критериям!

2. добавление в @ti7 pandas «по сути, является оболочкой для numpy» для 2-d таблиц! если вам нужно больше измерений, pandas может вам подойти, а может и не подойти

Ответ №1:

Решаемая вместо этих строк

 for num in app_row:
    if num > 400 or num < -150:
  

Я заменил его на:

 for i in indexes:
    if app_row[i]> 400 or app_row[i]< -150:
  

Благодаря @David Erickson