如何遍历DataFrame两列生成嵌套字典结构的元数据
解决DataFrame列元数据字典生成问题
核心思路
通过遍历DataFrame的列与对应数据类型,用原生字典赋值操作构建目标嵌套结构,避免误用Pandas拼接方法导致的TypeError,同时通过类型映射表适配未来新增的数据类型。
错误原因分析
你遇到的TypeError是因为错误地使用了Pandas的concat或类似DataFrame/Series操作来处理字典——这类方法仅支持Pandas数据结构,不兼容原生字典,必须改用Python原生字典的赋值逻辑。
完整实现代码
import pandas as pd # 示例测试数据集 df = pd.DataFrame({ "username": ["john_doe", "jane_smith"], "signup_year": [2020, 2021], "is_premium": [True, False], "account_balance": [125.75, 89.20], "last_login": pd.date_range("2024-01-01", periods=2) }) # 初始化元数据基础结构 metadata = {"columns": {}} # 定义数据类型映射表,可按需扩展新增类型 type_mapping = { "object": "string", "bool": "boolean", "int64": "integer", "float64": "float", "datetime64[ns]": "datetime" } # 循环填充每个列的元数据 for col_name, dtype in df.dtypes.items(): dtype_str = str(dtype) # 优先使用映射表的友好名称,无匹配则保留原始类型字符串 metadata["columns"][col_name] = {"type": type_mapping.get(dtype_str, dtype_str)} # 输出结果 print(metadata)
输出示例
{ "columns": { "username": {"type": "string"}, "signup_year": {"type": "integer"}, "is_premium": {"type": "boolean"}, "account_balance": {"type": "float"}, "last_login": {"type": "datetime"} } }
扩展适配新数据类型
如果后续需要支持更多数据类型(如category类型),仅需在type_mapping中添加对应映射即可:
type_mapping.update({ "category": "categorical" })
内容的提问来源于stack exchange,提问作者PineNuts0
相关产品推荐
相关产品推荐

