You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.6 KiB
55 lines
1.6 KiB
import pandas as pd
|
|
import json
|
|
from loguru import logger
|
|
|
|
|
|
def dict_to_dataframe(data: dict) -> pd.DataFrame:
|
|
"""
|
|
Converts a dictionary into a Pandas DataFrame with formatted values.
|
|
Handles non-serializable values gracefully by skipping them.
|
|
|
|
Args:
|
|
data (dict): The dictionary to convert.
|
|
|
|
Returns:
|
|
pd.DataFrame: A DataFrame representation of the dictionary.
|
|
"""
|
|
formatted_data = {}
|
|
|
|
for key, value in data.items():
|
|
try:
|
|
# Attempt to serialize the value
|
|
if isinstance(value, list):
|
|
# Format list as comma-separated string
|
|
formatted_value = ", ".join(
|
|
str(item) for item in value
|
|
)
|
|
elif isinstance(value, dict):
|
|
# Format dict as key-value pairs
|
|
formatted_value = ", ".join(
|
|
f"{k}: {v}" for k, v in value.items()
|
|
)
|
|
else:
|
|
# Convert other serializable types to string
|
|
formatted_value = json.dumps(
|
|
value
|
|
) # Serialize value to string
|
|
|
|
formatted_data[key] = formatted_value
|
|
except (TypeError, ValueError) as e:
|
|
# Log and skip non-serializable items
|
|
logger.warning(
|
|
f"Skipping non-serializable key '{key}': {e}"
|
|
)
|
|
continue
|
|
|
|
# Convert the formatted dictionary into a DataFrame
|
|
return pd.DataFrame(
|
|
list(formatted_data.items()), columns=["Key", "Value"]
|
|
)
|
|
|
|
|
|
example = dict_to_dataframe(data={"chicken": "noodle_soup"})
|
|
# formatter.print_panel(example)
|
|
print(example)
|