diff table_pandas_rename_column.py @ 0:3f54cd56a65e draft default tip

planemo upload for repository https://github.com/RECETOX/galaxytools/tree/master/tools/tables commit d0ff40eb2b536fec6c973c3a9ea8e7f31cd9a0d6
author recetox
date Wed, 29 Jan 2025 15:35:31 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/table_pandas_rename_column.py	Wed Jan 29 15:35:31 2025 +0000
@@ -0,0 +1,76 @@
+import argparse
+import logging
+from typing import Tuple
+
+import pandas as pd
+from utils import KeyValuePairsAction, LoadDataAction, StoreOutputAction
+
+
+def rename_columns(df: pd.DataFrame, rename_dict: dict):
+    """
+    Rename columns in the dataframe based on the provided dictionary.
+
+    Parameters:
+    df (pd.DataFrame): The input dataframe.
+    rename_dict (dict): A dictionary with 1-based column index as key and new column name as value.
+
+    Returns:
+    pd.DataFrame: The dataframe with renamed columns.
+    """
+    try:
+        rename_map = {
+            df.columns[key - 1]: value for key, value in rename_dict.items()
+        }  # Convert 1-based index to column name
+        return df.rename(columns=rename_map)
+    except IndexError as e:
+        logging.error(f"Invalid column index: {e}")
+        raise
+    except Exception as e:
+        logging.error(f"Error renaming columns: {e}")
+        raise
+
+
+def main(input_dataset: pd.DataFrame, rename_dict: dict, output_dataset: Tuple[callable, str]):
+    """
+    Main function to load the dataset, rename columns, and save the result.
+
+    Parameters:
+    input_dataset (pd.DataFrame): The input dataset .
+    rename_dict (dict): A dictionary with 1-based column index as key and new column name as value.
+    output_dataset (tuple): The function to store the output dataset and the path.
+    """
+    try:
+        write_func, file_path = output_dataset
+        write_func(rename_columns(input_dataset, rename_dict), file_path)
+    except Exception as e:
+        logging.error(f"Error in main function: {e}")
+        raise
+
+
+if __name__ == "__main__":
+    logging.basicConfig(level=logging.INFO)
+    parser = argparse.ArgumentParser(description="Rename columns in a dataframe.")
+    parser.add_argument(
+        "--input_dataset",
+        nargs=2,
+        action=LoadDataAction,
+        required=True,
+        help="Path to the input dataset and its file extension (csv, tsv, parquet)",
+    )
+    parser.add_argument(
+        "--rename",
+        nargs="+",
+        action=KeyValuePairsAction,
+        required=True,
+        help="List of key=value pairs with 1-based column index as key and new column name as value",
+    )
+    parser.add_argument(
+        "--output_dataset",
+        nargs=2,
+        action=StoreOutputAction,
+        required=True,
+        help="Path to the output dataset and its file extension (csv, tsv, parquet)",
+    )
+
+    args = parser.parse_args()
+    main(args.input_dataset, args.rename, args.output_dataset)