在python数据框中遍历字典

时间:2020-07-09 16:40:42

标签: python python-3.x pandas dictionary

我正在尝试遍历存在于python数据框行中的字典,请参阅以下数据框的一行以供参考: 状态栏为空。

未命名:0城市州/国家/地区邮政编码距离
720 4976 Barcelona Spain 08001 {'08001':0,'08002':2.2,'08003':2.2}

当我运行以下代码时,会出现此错误-> TypeError:字符串索引必须为整数

代码:

import sys
import json
import pandas as pd
dfglobal=pd.read_csv("postcoderadius.csv")
#print(dfglobal)
filtered_df2  = pd.DataFrame([])
# s=sys.argv[1]
# ci=s[s.find("City=")+5:s.find("&State")]
# cs=s[s.find('State')+6:s.find("&Country")]
# ci=ci.replace('+','')
# cs=cs.replace('+','-')
# co=s[s.find("Country")+8:s.find("&ZipCode")]
# givenpostal=s[s.find("ZipCode")+8:s.find("&Radius")]
# radius=float(s[s.find("Radius")+8:])
ci="Barcelona"
co="Spain"
cs=""
givenpostal="08001"
radius=4.0
print(ci,co,cs,givenpostal,radius)
#print("hello1")
filtered_df2=pd.concat([filtered_df2,dfglobal[(dfglobal['Country'] == co) & (dfglobal['City'] == ci) &  (dfglobal['PostalCode'] == givenpostal)]])
#print(filtered_df2)
#filtered_df2['PostalCode']=filtered_df2['PostalCode'].apply(str)
a_dict=filtered_df2['Distance']
#print(a_dict)
result  = pd.DataFrame([])
resp=[]
resr=[]
for index, row in filtered_df2.iterrows():
    #print(row['Distance'])
    dictp=row['Distance']
    for key in dictp: 
        print(dictp[key])


result['PostalCode']=resp
result['City']=ci
result['Country']=co
result['Radius']=resr
result=result.reindex(["City","Country","PostalCode","Radius"],axis=1)
result.to_csv("distance.csv")    

1 个答案:

答案 0 :(得分:0)

row['Distance']似乎没有返回字典, 但是一个字符串。 (如果没有,请举一个完整的,可复制的示例)

因此dictp = row['Distance'] dictp之后是一个字符串。

for key in dictp将返回字符串的每个字母。

print(dictp[key])将导致错误,因为对于字符串, key必须是数字。

您可以通过在type(dictp)行之后打印dictp=row['Distance']来检查这是否是您的问题。如果显示str,那就是原因。

这是解决此问题的方法:

您可以使用eval()函数将字符串转换为真实的字典。

赞:

dictp = "{'08001': 0, '08002': 2.2, '08003': 2.2}"
mydict = eval(dictp)

请注意,如果您不能保证所有行都有一个字典,则存在安全隐患,因为它运行代码。