emidiosouza commited on
Commit
960f8ac
·
1 Parent(s): fdec39b

fix: ajustes de filtros de data e de limite de itens categóricos

Browse files
Files changed (1) hide show
  1. utils/filter.py +16 -4
utils/filter.py CHANGED
@@ -32,7 +32,7 @@ def flatten_unique_values(series: pd.Series) -> list:
32
  unique_values_set.add(val)
33
  return list(unique_values_set)
34
 
35
- def filter_dataframe(df: pd.DataFrame) -> pd.DataFrame:
36
  df = df.copy()
37
 
38
  # Primeiro, converta todos os valores da DataFrame para hashable
@@ -62,7 +62,7 @@ def filter_dataframe(df: pd.DataFrame) -> pd.DataFrame:
62
  left.write("↳")
63
 
64
  # Para colunas categóricas ou com poucos valores únicos, use multiselect
65
- if is_categorical_dtype(df[column]) or df[column].nunique() < 5000:
66
  raw_unique_values = df[column].dropna().unique()
67
  # Verifica se há valores do tipo tupla (decorrentes de listas convertidas)
68
  if any(isinstance(val, tuple) for val in raw_unique_values):
@@ -119,7 +119,7 @@ def filter_dataframe(df: pd.DataFrame) -> pd.DataFrame:
119
  unique_values = list(raw_unique_values)
120
  is_flattened = False
121
 
122
- if len(unique_values) < 5000:
123
  user_text_input = right.multiselect(
124
  f"Valores para {column}",
125
  unique_values,
@@ -135,7 +135,19 @@ def filter_dataframe(df: pd.DataFrame) -> pd.DataFrame:
135
  df = df[df[column].isin(user_text_input)]
136
  else:
137
  user_text_input = right.text_input(
138
- f"Substring ou regex em {column}",
 
 
 
 
 
 
 
 
 
 
 
 
139
  )
140
  if user_text_input:
141
  df = df[df[column].astype(str).str.contains(user_text_input, na=False)]
 
32
  unique_values_set.add(val)
33
  return list(unique_values_set)
34
 
35
+ def filter_dataframe(df: pd.DataFrame, ignore_unique_limit = ["Alvo ou depósito"]) -> pd.DataFrame:
36
  df = df.copy()
37
 
38
  # Primeiro, converta todos os valores da DataFrame para hashable
 
62
  left.write("↳")
63
 
64
  # Para colunas categóricas ou com poucos valores únicos, use multiselect
65
+ if is_categorical_dtype(df[column]) or df[column].nunique() < 100 or column in ignore_unique_limit:
66
  raw_unique_values = df[column].dropna().unique()
67
  # Verifica se há valores do tipo tupla (decorrentes de listas convertidas)
68
  if any(isinstance(val, tuple) for val in raw_unique_values):
 
119
  unique_values = list(raw_unique_values)
120
  is_flattened = False
121
 
122
+ if len(unique_values) < 100:
123
  user_text_input = right.multiselect(
124
  f"Valores para {column}",
125
  unique_values,
 
135
  df = df[df[column].isin(user_text_input)]
136
  else:
137
  user_text_input = right.text_input(
138
+ f"Substring ou regex em {column}",
139
+ help="""
140
+ **Pesquise palavras ou padrões usando regex:**
141
+
142
+ - **Múltiplos termos:** `maçã|banana` (busca "maçã" ou "banana").
143
+ - **Início da palavra:** `^carro` (encontra "carro", "carroça", etc.).
144
+ - **Fim da palavra:** `casa$` (encontra "minha casa", "tua casa", etc.).
145
+ - **Números:** `\d+` (encontra qualquer número, como "123", "2024").
146
+ - **Número específico:** `123` (encontra exatamente o número "123").
147
+ - **Palavras e números:** `carro|123` (encontra "carro" ou "123").
148
+
149
+ Deixe vazio para não filtrar.
150
+ """
151
  )
152
  if user_text_input:
153
  df = df[df[column].astype(str).str.contains(user_text_input, na=False)]