#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