import numpy as np
from PyQt5 import QtWidgets
from gui.ui.RemoveRows import Ui_Form
from gui.util.Modules import Modules
[docs]
class remove_operation:
def __init__(self, colname, operator, value, logic=None, hidden=None):
self.colname = colname
self.operator = operator
self.value = value
self.logic = logic
self.hidden = hidden
if hidden is not None:
self.hidden.setHidden(True)
self.hidden.stateChanged.connect(self.Hidden)
[docs]
def Hidden(self):
if self.hidden.isChecked():
self.colname.setHidden(True)
self.operator.setHidden(True)
self.value.setHidden(True)
try:
self.logic.setHidden(True)
except:
pass
else:
self.colname.setHidden(False)
self.operator.setHidden(False)
self.value.setHidden(False)
try:
self.logic.setHidden(False)
except:
pass
[docs]
def GetValues(self):
try:
return {
'column': self.colname.currentText(),
'operator': self.operator.currentText(),
'value': self.value.currentText().split(' : ')[0],
'logic': self.logic.currentText()
}
except:
return {
'column': self.colname.currentText(),
'operator': self.operator.currentText(),
'value': self.value.currentText().split(' : ')[0]
}
[docs]
class RemoveRows(Ui_Form, Modules):
[docs]
def setupUi(self, Form):
super().setupUi(Form)
self.setup_remove_operations()
Modules.setupUi(self, Form)
[docs]
def setup_remove_operations(self):
self.operations = [
remove_operation(
self.colName_1, self.operator_1, self.value_1,
logic=self.logic_1
),
remove_operation(
self.colName_2, self.operator_2, self.value_2,
logic=self.logic_2,
hidden=self.hidden_2
),
remove_operation(
self.colName_3, self.operator_3, self.value_3,
logic=self.logic_3,
hidden=self.hidden_3
),
remove_operation(
self.colName_4, self.operator_4, self.value_4,
logic=self.logic_4,
hidden=self.hidden_4
),
remove_operation(
self.colName_5, self.operator_5, self.value_5,
hidden=self.hidden_5
)]
for i in self.operations:
try:
i.hidden.setChecked(True)
except:
pass
i.colname.currentIndexChanged.connect(lambda: self.update_vals())
[docs]
def update_cols(self):
for i in self.operations:
self.setComboBox(i.colname, self.get_colname_choices())
self.update_vals()
[docs]
def update_vals(self):
for i in self.operations:
self.setComboBox(
i.value,
self.get_rowval_choices(i.colname.currentText())
)
[docs]
def connect_logic(self):
for i in self.operations:
try:
i.logic.currentIndexChanged.connect(
lambda: self.hide_operations()
)
except:
pass
[docs]
def hide_operations(self):
for i in range(len(self.operations) - 1):
try:
if self.operations[i].logic.currentText() == 'and':
self.operations[i + 1].hidden.setChecked(False)
else:
self.operations[i + 1].hidden.setChecked(True)
if self.operations[i + 1].logic.currentText() == 'and':
self.operations[i].logic.setEnabled(False)
else:
self.operations[i].logic.setEnabled(True)
except:
pass
[docs]
def run(self):
datakey = self.chooseData.currentText()
matching_values = []
for i in self.operations:
if i.hidden is None:
matching_values.append(i.GetValues())
elif i.hidden.isChecked() is False:
matching_values.append(i.GetValues())
else:
pass
self.data[datakey].remove_rows(matching_values)
[docs]
def get_colname_choices(self):
try:
self.vars_level0 = self.data[
self.chooseData.currentText()].df.columns.get_level_values(0)
self.vars_level1 = self.data[
self.chooseData.currentText()].df.columns.get_level_values(1)
spect_label = self.data[self.chooseData.currentText()].spect_label
self.vars_level1 = list(
self.vars_level1[
np.logical_and(
self.vars_level0 != spect_label,
self.vars_level0 != 'masked'
)]
)
self.vars_level0 = list(
self.vars_level0[
np.logical_and(
self.vars_level0 != spect_label,
self.vars_level0 != 'masked'
)]
)
colnamechoices = self.vars_level1
except:
try:
colnamechoices = self.data[
self.chooseData.currentText()].columns.values
except:
colnamechoices = []
colnamechoices = [i for i in colnamechoices if 'Unnamed' not in str(
i
)] # remove unnamed columns from choices
return colnamechoices
[docs]
def get_rowval_choices(self, colname):
try:
colname = (
self.vars_level0[self.vars_level1.index(colname)], colname)
choices = self.data[self.chooseData.currentText()].df[colname]
nchoice = []
try:
choices = np.sort(choices)
except:
pass
choices = [str(i) for i in choices]
for choice in choices:
if not choice + ' : ' + str(choices.count(choice)) in nchoice:
nchoice.append(choice + ' : ' + str(choices.count(choice)))
choices = nchoice
except:
choices = ['-']
return choices
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = RemoveRows()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())