将字典转换为面板数据时出现‘str’无法转为整数错误求助
解决字典转面板数据时的
'str' object cannot be interpreted as an integer报错 你这情况我之前也碰到过,就是字典层级搞混了加上类型转换的问题,咱们一步步捋清楚:
报错的核心原因
int(ii)的类型转换错误:你想把ii转成整数,但ii实际是字符串——要么是像'AAPL'这种字母组成的代码,要么是'2023-10-01'这种带横杠的日期,这两种字符串都没法直接转成整数,自然就报错了。code列赋值逻辑错了:item[ii]是一整个包含日期和指标的字典,你直接把它赋值给code列,结果就是每个单元格都是一个字典,完全不是面板数据该有的样子。
修正后的代码
假设你的原始字典结构和参考文章一致(也就是data是一个列表,每个元素是{代码: {日期: {指标: 值}}}这样的嵌套字典),那修正后的代码应该是这样:
import pandas as pd appended_data = pd.DataFrame() for item in data: # 遍历每个代码及其对应的日期-指标数据 for code, date_metrics in item.items(): # 以日期为行、指标为列生成DataFrame df = pd.DataFrame.from_dict(date_metrics, orient='index') # 把日期索引转成普通列,命名为date df.reset_index(inplace=True) df.rename(columns={'index': 'date'}, inplace=True) # 给当前所有行添加对应的代码 df['code'] = code # 合并到总数据中,ignore_index避免索引冲突 appended_data = appended_data.append(df, ignore_index=True) # 可选操作:把date列转成日期类型,方便后续时间序列处理 appended_data['date'] = pd.to_datetime(appended_data['date']) # 转成你需要的字典格式 dic = appended_data.to_dict(orient='records')
关键修复点说明
- 去掉了强行转整数的操作:直接保留日期字符串,或者转成
datetime类型(更适合面板数据的时间操作)。 - 明确了字典层级:外层键是
code(比如股票代码),内层是该代码对应的所有日期指标数据,这样每个行都能正确关联到对应的代码。 - 把索引转成列:用
reset_index()把原来作为索引的日期转成普通列,这是面板数据的标准格式——每一行代表一个“代码-日期”的观测值。
内容的提问来源于stack exchange,提问作者Hannah Lee
相关产品推荐
相关产品推荐

