Python 错误:字符串索引必须是整数

Python 错误:字符串索引必须是整数,python,pandas,Python,Pandas,我不确定下面的代码哪里出错了,我使用了两个for循环,首先迭代statename,然后迭代包含特定statename的每个字典 我最终通过我的第二个代码解决了这个问题——剪报上正确的代码,但是我很想知道为什么第一个代码不起作用 使用的文件是一个人口普查文件,其中statename、countyname是州的一个分支,population是列 无法处理左侧的以下剪报,错误为“字符串索引必须是整数”: 不知道为什么照片不上来…对不起,第一次来这里! 我尝试的第一个代码是:关于字符串索引必须是整数:

我不确定下面的代码哪里出错了,我使用了两个for循环,首先迭代statename,然后迭代包含特定statename的每个字典

我最终通过我的第二个代码解决了这个问题——剪报上正确的代码,但是我很想知道为什么第一个代码不起作用

使用的文件是一个人口普查文件,其中statename、countyname是州的一个分支,population是列

无法处理左侧的以下剪报,错误为“字符串索引必须是整数”:


不知道为什么照片不上来…对不起,第一次来这里! 我尝试的第一个代码是:关于字符串索引必须是整数:

state_unique=census_df['STNAME'].unique()
list=[]
def answer_five():
    for c in state_unique:
        count=0
        for d in census_df:
            if d['STNAME']==c:
               count+=1
        return list.append(count)
answer_five()
帮助我解决问题的第二个代码是:

max_county=[]
state_unique=census_df['STNAME'].unique()
def answer_five():
    for c in state_unique:
        df1=census_df[census_df['STNAME']==c]
        max_county.append(len(df1))
    return max(max_county)
answer_five()

正如其他人已经建议的那样,请仔细阅读提供一个。不过,我可以看出这里出了什么问题。当您在census_df中循环d时,实际上会循环数据帧的列名,即SUMLEV、REGION等。这大概不是您所想的

然后,如果d['STNAME']==c,那么您的下一行将导致一个错误,正如消息所说,因为字符串索引必须是整数。在本例中,您尝试使用另一个字符串STNAME为字符串编制索引

如果确实希望第一种方法起作用,请尝试使用ItErrors:


这不是问问题的方式,你的问题很可能已经结束了。我建议你花些时间去理解如何提出一个好问题,这样我们可以给你一个好的答案。阅读后,你可能会想要的是:census_df.groupby'STNAME'。不管怎样,cumcountPosting文本远比截图有用。酷,谢谢!我想对于人口普查中的d,这里的d表示每一个字典在每一行而不是每一列?“我发现如果我必须迭代的列都是整数,这样的问题就不会发生了?”JaneZhang很高兴听到这有帮助。如果你愿意,请随意接受答案并投票。即使列名是整数或该列中的数据只是整数,您在census_df中的for d仍将在列上迭代。一般来说,使用带有数据帧的for循环是一个坏主意-从长远来看,习惯内置函数将对您带来巨大的好处。干杯,汤姆!帮助!他很聪明。但是作为一个初学者,我不知何故倾向于使用冗长的for循环来克服它。。。
state_unique=census_df['STNAME'].unique()
list=[]
def answer_five():
    for c in state_unique:
        count=0
        for index, row in census_df.iterrows():
            if row['STNAME']==c:
               count+=1
        list.append(count)
    return(max(list))
answer_five()