You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将Pandas复杂字典类型写入DynamoDB遇类型错误,求嵌套Lambda方案

解决DynamoDB写入复杂类型时的numpy.ndarray不支持错误

报错核心原因是:pandas会自动把列表类型转为numpy.ndarray,而DynamoDB只支持原生Python数据类型(如list、dict、str等),因此需要将嵌套结构中的numpy数组转回普通Python列表。

针对当前场景的快速解决方案

直接在apply里遍历字典的键值对,将numpy数组转为列表:

import pandas as pd
import numpy as np

df = pd.DataFrame.from_records([{"col_w_status": {"ACTIVE":["ABC100-01"],"INACTIVE":["ABC100"]}}])
col_list = ["col_w_status"]

for col in col_list:
    # 遍历字典内的每个值,将numpy数组转为Python列表
    df[col] = df[col].apply(lambda x: {k: v.tolist() if isinstance(v, np.ndarray) else v for k, v in x.items()})

# 执行写入操作
# wr.dynamodb.put_df(df, <tableName>)

支持深层嵌套结构的通用解决方案

如果你的数据有多层嵌套(比如列表中包含字典,字典内又有数组),可以写一个递归函数统一转换:

import pandas as pd
import numpy as np

def convert_numpy_to_python(obj):
    if isinstance(obj, np.ndarray):
        return obj.tolist()
    elif isinstance(obj, dict):
        return {k: convert_numpy_to_python(v) for k, v in obj.items()}
    elif isinstance(obj, list):
        return [convert_numpy_to_python(item) for item in obj]
    else:
        return obj

df = pd.DataFrame.from_records([{"col_w_status": {"ACTIVE":["ABC100-01"],"INACTIVE":["ABC100"]}}])
col_list = ["col_w_status"]

for col in col_list:
    df[col] = df[col].apply(convert_numpy_to_python)

# 执行写入操作
# wr.dynamodb.put_df(df, <tableName>)

内容的提问来源于stack exchange,提问作者NNM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 20:26:00