遍历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
相关产品推荐
相关产品推荐

