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

遍历DataFrame生成JSON列表触发AttributeError,求正确实现方式

问题分析与解决

错误原因

你遇到的AttributeError: 'str' object has no attribute 'values'是因为:
df_metadata.iterrows()返回的每一个df_row是Series对象(代表DataFrame的一行),而非你预期的单行DataFrame。此时df_row['Title']直接就是该行对应列的字符串值,再调用.values[0]自然会报错——字符串没有values属性。

正确实现方式

方式一:修改适配Series的编码函数

调整encode_df_metadata_row,直接从Series中取对应值即可:

def encode_df_metadata_row(row):
    return {
        'name': row['Title'],
        'code': row['Code'],
        'frequency': row['Frequency'],
        'description': row['Subtitle'],
        'source': row['Source']
    }

def encode_metadata_list(df_metadata):
    return [encode_df_metadata_row(df_row) for index, df_row in df_metadata.iterrows()]

# 调用代码不变
df_oodler_metadata = pd.read_csv('DATA\\oodler-datasets-metadata.csv')
response = encode_metadata_list(df_oodler_metadata)
print(response)

方式二:用pandas内置方法(更高效)

pandas原生支持将DataFrame直接转换为字典列表,无需手动遍历,性能更优:

import pandas as pd

df_oodler_metadata = pd.read_csv('DATA\\oodler-datasets-metadata.csv')
# 先重命名列名匹配目标键名,再转成字典列表
response = df_oodler_metadata.rename(columns={
    'Title': 'name',
    'Code': 'code',
    'Frequency': 'frequency',
    'Subtitle': 'description',
    'Source': 'source'
}).to_dict('records')

print(response)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 13:31:08