как исправить ошибку flake 8 "Сравнение E712 с False должно быть" если cond равно False: "или" если не cond: "" в панде dataframe - PullRequest
0 голосов
/ 01 февраля 2019

Я получаю ошибку flake 8 для E712 в строке "Added_parts = new_part_set [(new_part_set [" duplicate "] == False) & (new_part_set [" version "] ==" target ")]" **

Ниже приведен фрагмент кода, который мы использовали для сравнения электронных таблиц

source_df = pd.read_excel(self.source, sheet).fillna('NA')
target_df = pd.read_excel(self.target, sheet).fillna('NA')
file_path = os.path.dirname(self.source)

column_list = source_df.columns.tolist()

source_df['version'] = "source"
target_df['version'] = "target"

source_df.sort_values(by=unique_col)
source_df = source_df.reindex()
target_df.sort_values(by=unique_col)
target_df = target_df.reindex()

# full_set = pd.concat([source_df, target_df], ignore_index=True)
diff_panel = pd.concat([source_df, target_df],
                       axis='columns', keys=['df1', 'df2'], join='outer', sort=False)
diff_output = diff_panel.apply(self.__report_diff, axis=0)
diff_output['has_change'] = diff_output.apply(self.__has_change)

full_set = pd.concat([source_df, target_df], ignore_index=True)
changes = full_set.drop_duplicates(subset=column_list, keep='last')
dupe_records = changes.set_index(unique_col).index.unique()

changes['duplicate'] = changes[unique_col].isin(dupe_records)
removed_parts = changes[(changes["duplicate"] == False) & (changes["version"] == "source")]
new_part_set = full_set.drop_duplicates(subset=column_list, keep='last')
new_part_set['duplicate'] = new_part_set[unique_col].isin(dupe_records)
added_parts = new_part_set[(new_part_set["duplicate"] == False) & (new_part_set["version"] == "target")]

diff_file = file_path + "file_diff.xlsx"
if os.path.exists(diff_file):
    os.remove(diff_file)
writer = pd.ExcelWriter(file_path + "file_diff.xlsx")
diff_output.to_excel(writer, "changed")
removed_parts.to_excel(writer, "removed", index=False, columns=column_list)
added_parts.to_excel(writer, "added", index=False, columns=column_list)
writer.save()

Существуют ли другие способы, как этого можно избежать, не уверен в дальнейшем.

1 Ответ

0 голосов
/ 01 февраля 2019

В ваших масках DataFrame у вас есть (changes["duplicate"] == False), а (new_part_set["duplicate"] == False) flake8 предлагает вам изменить их.Причина, по которой он жалуется, состоит в том, что в python считается плохой практикой сравнивать с логическими значениями с помощью оператора ==, вместо этого вы должны писать if my_bool:... и if not my_bool:... и т. Д. В пандах, если у вас есть логические ряды, вы можете принять отрицаниес помощью оператора ~, поэтому ваши новые маски будут записаны:

~changes["duplicate"] # & ... blah blah
~new_part_set["duplicate"] # & ... blah blah
...