Spaces:
Running
Running
Commit
·
960f8ac
1
Parent(s):
fdec39b
fix: ajustes de filtros de data e de limite de itens categóricos
Browse files- 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() <
|
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) <
|
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)]
|