Pandas遍历字典中DataFrame提取列报错:TypeError: string indices must be integers
解决遍历字典提取DataFrame列时的TypeError问题
你遇到的TypeError: string indices must be integers问题其实很好解决,核心是你遍历字典的方式错了。
当你写for df in d的时候,Python默认遍历的是字典的键(key)——也就是像"DataFrame1"这样的字符串,而不是字典里存储的DataFrame对象。这时候你尝试用df['Names']去索引,本质是在对一个字符串做索引操作,而字符串只能用整数来指定位置(比如"abc"[0]取第一个字符),自然会触发类型错误。
正确的写法有两种:
1. 遍历字典的键值对(最直观)
import pandas as pd df_All_Names = pd.DataFrame() # 用.items()获取每个键和对应的DataFrame for df_name, df in d.items(): df_All_Names[df_name] = df['Names']
这里df_name是字典的键(用来作为新DataFrame的列名),df才是真正的DataFrame对象,这样就能正确提取'Names'列了。
2. 用字典推导式一步构造(更简洁高效)
import pandas as pd df_All_Names = pd.DataFrame({name: df['Names'] for name, df in d.items()})
这种写法直接通过字典推导式生成构造新DataFrame所需的键值对,代码更紧凑。
额外提醒:
注意你示例里的DataFrame列名是Name,但代码里写的是'Names'(多了个s),如果实际DataFrame的列名是'Name',记得把代码里的'Names'改成'Name',不然会触发KeyError哦。
内容的提问来源于stack exchange,提问作者Curious Student
相关产品推荐
相关产品推荐

