feat: add drop duplicates operation to DataFrameOperationsComponent (#8665)
* Update dataframe_operations.py * [autofix.ci] apply automated fixes * Update dataframe_operations.py --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
This commit is contained in:
parent
fe4fa8e08b
commit
25746e20ca
1 changed files with 42 additions and 28 deletions
|
|
@ -1,5 +1,14 @@
|
||||||
from langflow.custom.custom_component.component import Component
|
from langflow.custom.custom_component.component import Component
|
||||||
from langflow.io import BoolInput, DataFrameInput, DropdownInput, IntInput, MessageTextInput, Output, StrInput
|
from langflow.io import (
|
||||||
|
BoolInput,
|
||||||
|
DataFrameInput,
|
||||||
|
DropdownInput,
|
||||||
|
IntInput,
|
||||||
|
MessageTextInput,
|
||||||
|
Output,
|
||||||
|
StrInput,
|
||||||
|
)
|
||||||
|
from langflow.logging import logger
|
||||||
from langflow.schema.dataframe import DataFrame
|
from langflow.schema.dataframe import DataFrame
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -7,8 +16,8 @@ class DataFrameOperationsComponent(Component):
|
||||||
display_name = "DataFrame Operations"
|
display_name = "DataFrame Operations"
|
||||||
description = "Perform various operations on a DataFrame."
|
description = "Perform various operations on a DataFrame."
|
||||||
icon = "table"
|
icon = "table"
|
||||||
|
name = "DataFrameOperations"
|
||||||
|
|
||||||
# Available operations
|
|
||||||
OPERATION_CHOICES = [
|
OPERATION_CHOICES = [
|
||||||
"Add Column",
|
"Add Column",
|
||||||
"Drop Column",
|
"Drop Column",
|
||||||
|
|
@ -19,6 +28,7 @@ class DataFrameOperationsComponent(Component):
|
||||||
"Select Columns",
|
"Select Columns",
|
||||||
"Sort",
|
"Sort",
|
||||||
"Tail",
|
"Tail",
|
||||||
|
"Drop Duplicates",
|
||||||
]
|
]
|
||||||
|
|
||||||
inputs = [
|
inputs = [
|
||||||
|
|
@ -26,6 +36,7 @@ class DataFrameOperationsComponent(Component):
|
||||||
name="df",
|
name="df",
|
||||||
display_name="DataFrame",
|
display_name="DataFrame",
|
||||||
info="The input DataFrame to operate on.",
|
info="The input DataFrame to operate on.",
|
||||||
|
required=True,
|
||||||
),
|
),
|
||||||
DropdownInput(
|
DropdownInput(
|
||||||
name="operation",
|
name="operation",
|
||||||
|
|
@ -111,7 +122,6 @@ class DataFrameOperationsComponent(Component):
|
||||||
]
|
]
|
||||||
|
|
||||||
def update_build_config(self, build_config, field_value, field_name=None):
|
def update_build_config(self, build_config, field_value, field_name=None):
|
||||||
# Hide all dynamic fields by default
|
|
||||||
dynamic_fields = [
|
dynamic_fields = [
|
||||||
"column_name",
|
"column_name",
|
||||||
"filter_value",
|
"filter_value",
|
||||||
|
|
@ -126,7 +136,6 @@ class DataFrameOperationsComponent(Component):
|
||||||
for field in dynamic_fields:
|
for field in dynamic_fields:
|
||||||
build_config[field]["show"] = False
|
build_config[field]["show"] = False
|
||||||
|
|
||||||
# Show relevant fields based on the selected operation
|
|
||||||
if field_name == "operation":
|
if field_name == "operation":
|
||||||
if field_value == "Filter":
|
if field_value == "Filter":
|
||||||
build_config["column_name"]["show"] = True
|
build_config["column_name"]["show"] = True
|
||||||
|
|
@ -150,36 +159,39 @@ class DataFrameOperationsComponent(Component):
|
||||||
build_config["column_name"]["show"] = True
|
build_config["column_name"]["show"] = True
|
||||||
build_config["replace_value"]["show"] = True
|
build_config["replace_value"]["show"] = True
|
||||||
build_config["replacement_value"]["show"] = True
|
build_config["replacement_value"]["show"] = True
|
||||||
|
elif field_value == "Drop Duplicates":
|
||||||
|
build_config["column_name"]["show"] = True
|
||||||
|
|
||||||
return build_config
|
return build_config
|
||||||
|
|
||||||
def perform_operation(self) -> DataFrame:
|
def perform_operation(self) -> DataFrame:
|
||||||
dataframe_copy = self.df.copy()
|
df = self.df.copy()
|
||||||
operation = self.operation
|
op = self.operation
|
||||||
|
|
||||||
if operation == "Filter":
|
|
||||||
return self.filter_rows_by_value(dataframe_copy)
|
|
||||||
if operation == "Sort":
|
|
||||||
return self.sort_by_column(dataframe_copy)
|
|
||||||
if operation == "Drop Column":
|
|
||||||
return self.drop_column(dataframe_copy)
|
|
||||||
if operation == "Rename Column":
|
|
||||||
return self.rename_column(dataframe_copy)
|
|
||||||
if operation == "Add Column":
|
|
||||||
return self.add_column(dataframe_copy)
|
|
||||||
if operation == "Select Columns":
|
|
||||||
return self.select_columns(dataframe_copy)
|
|
||||||
if operation == "Head":
|
|
||||||
return self.head(dataframe_copy)
|
|
||||||
if operation == "Tail":
|
|
||||||
return self.tail(dataframe_copy)
|
|
||||||
if operation == "Replace Value":
|
|
||||||
return self.replace_values(dataframe_copy)
|
|
||||||
msg = f"Unsupported operation: {operation}"
|
|
||||||
|
|
||||||
|
if op == "Filter":
|
||||||
|
return self.filter_rows_by_value(df)
|
||||||
|
if op == "Sort":
|
||||||
|
return self.sort_by_column(df)
|
||||||
|
if op == "Drop Column":
|
||||||
|
return self.drop_column(df)
|
||||||
|
if op == "Rename Column":
|
||||||
|
return self.rename_column(df)
|
||||||
|
if op == "Add Column":
|
||||||
|
return self.add_column(df)
|
||||||
|
if op == "Select Columns":
|
||||||
|
return self.select_columns(df)
|
||||||
|
if op == "Head":
|
||||||
|
return self.head(df)
|
||||||
|
if op == "Tail":
|
||||||
|
return self.tail(df)
|
||||||
|
if op == "Replace Value":
|
||||||
|
return self.replace_values(df)
|
||||||
|
if op == "Drop Duplicates":
|
||||||
|
return self.drop_duplicates(df)
|
||||||
|
msg = f"Unsupported operation: {op}"
|
||||||
|
logger.error(msg)
|
||||||
raise ValueError(msg)
|
raise ValueError(msg)
|
||||||
|
|
||||||
# Existing methods
|
|
||||||
def filter_rows_by_value(self, df: DataFrame) -> DataFrame:
|
def filter_rows_by_value(self, df: DataFrame) -> DataFrame:
|
||||||
return DataFrame(df[df[self.column_name] == self.filter_value])
|
return DataFrame(df[df[self.column_name] == self.filter_value])
|
||||||
|
|
||||||
|
|
@ -200,7 +212,6 @@ class DataFrameOperationsComponent(Component):
|
||||||
columns = [col.strip() for col in self.columns_to_select]
|
columns = [col.strip() for col in self.columns_to_select]
|
||||||
return DataFrame(df[columns])
|
return DataFrame(df[columns])
|
||||||
|
|
||||||
# New methods
|
|
||||||
def head(self, df: DataFrame) -> DataFrame:
|
def head(self, df: DataFrame) -> DataFrame:
|
||||||
return DataFrame(df.head(self.num_rows))
|
return DataFrame(df.head(self.num_rows))
|
||||||
|
|
||||||
|
|
@ -210,3 +221,6 @@ class DataFrameOperationsComponent(Component):
|
||||||
def replace_values(self, df: DataFrame) -> DataFrame:
|
def replace_values(self, df: DataFrame) -> DataFrame:
|
||||||
df[self.column_name] = df[self.column_name].replace(self.replace_value, self.replacement_value)
|
df[self.column_name] = df[self.column_name].replace(self.replace_value, self.replacement_value)
|
||||||
return DataFrame(df)
|
return DataFrame(df)
|
||||||
|
|
||||||
|
def drop_duplicates(self, df: DataFrame) -> DataFrame:
|
||||||
|
return DataFrame(df.drop_duplicates(subset=self.column_name))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue