Прежде всего - я знаю, что итерация по Pandas DataFrame не очень хорошая идея, поэтому любые предложения относительно других возможных решений приветствуются.
Я пытаюсь написать небольшой кусочек кода для сравнить два кадра данных, один из которых представляет собой шаблон для сравнения.
Данные кадры выглядят так (конечно, сокращенная версия):
Шаблон:
Template1 | Template2 | Template3
----------------------+-----------+------------
Variable 1 | value | value | value
Variable 2 | value | value | value
Variable 3 | value | value | value
Variable 4 | value | value | value
И файл для сравнения (файл данных):
Record 1 | Record 2 | Record 3 | Record 4
---------------------+----------+----------+----------
Variable 3 | value | value | value | value
Variable 1 | value | value | value | value
Variable 4 | value | value | value | value
Теперь, что скрипт должен сделать:
- взять один, указанный c столбец из файла шаблона
- сравнить каждую запись в файле данных с выбранным столбцом
Мне удалось написать небольшой фрагмент кода, и он даже работает для одной записи:
template = templatefile['Template2']
record_to_check = datafile[0]
errors_found = []
for a in template.index:
if a in record_to_check.index:
variable = {}
if template[a] == record_to_check[a]:
# equal
pass
else:
# unequal
variable['name'] = a
variable['value'] = template[a]
errors_found.append(variable)
else:
# not found
variable = {}
variable['name'] = a
variable['value'] = template[a]
errors_found.append(variable)
Возвращает словарь ошибок_налички, содержащие пару {переменная: значение}. Проблема начинается, когда я пытаюсь поместить ее в другой файл l oop (для перебора записей в файле данных:
template = templatefile['Template2']
for record_to_check in datafile.iteritems():
errors_found = []
for a in template.index:
if a in record_to_check.index:
variable = {}
if template[a] == record_to_check[a]:
# equal
pass
else:
# unequal
variable['name'] = a
variable['value'] = template[a]
errors_found.append(variable)
else:
# not found
variable = {}
variable['name'] = a
variable['value'] = template[a]
errors_found.append(variable)
результат:
Traceback (most recent call last):
File "attributes.py", line 24, in <module>
if a in record_to_check.index:
TypeError: argument of type 'builtin_function_or_method' is not iterable
Что я делаю неправильно?
РЕДАКТИРОВАТЬ: ожидаемый результат должен быть словарь, как это:
[{'name': 'variable2', 'value': value_from_template}, {'name': 'variable3', 'value': value_from_template}]
И я знаю, что если я запустил его в l oop, он будет перезаписывать словарь для каждой итерации. Я просто Я хотел быть уверен, что он работает с несколькими записями, поэтому я могу сделать из него функцию.