def run_txt2df()

in msticpy/datamodel/pivot_magic_core.py [0:0]


def run_txt2df(line, cell, local_ns) -> pd.DataFrame:
    """Convert cell text to pandas DataFrame."""
    arg_parser = _add_parser_args()
    try:
        line_args = line.split(" ") if line else []
        args = arg_parser.parse_args(line_args)
    except argparse.ArgumentError as err:
        raise AttributeError(
            "Invalid argument supplied.", "Use --help to see valid arguments."
        ) from err

    if not cell:
        return pd.DataFrame()
    cell_text = io.StringIO(cell)
    warn_args: Dict[str, Union[str, bool]]
    if _PD_VER < parse_version("1.3.0"):
        warn_args = {"warn_bad_lines": True}
    else:
        warn_args = {"on_bad_lines": "warn"}
    try:
        parsed_df = pd.read_csv(
            cell_text,
            header=0 if args.headers else None,
            prefix=None if args.headers else "column_",
            sep=args.sep,
            skipinitialspace=True,
            skip_blank_lines=True,
            engine="python",
            **warn_args,
        )
    except ParserError:
        # try again without headers
        cell_text = io.StringIO(cell)
        parsed_df = pd.read_csv(
            cell_text,
            sep=args.sep,
            skipinitialspace=True,
            skip_blank_lines=True,
            engine="python",
            **warn_args,
        )
        print(
            "One or more rows had more columns than specified in first row.",
            "Ignoring header row.",
        )
    if not args.keepna:
        parsed_df = parsed_df.dropna(axis=1, how="all")
    if local_ns is not None and args.name:
        local_ns[args.name] = parsed_df
    return parsed_df