【问题标题】:I got problem with the length of dataframe while using pandas我在使用熊猫时遇到了数据框长度的问题
【发布时间】:2024-05-02 20:45:02
【问题描述】:
a=0
for i in range (0,len(df)):
    if df['column name'][i][7]!='1' or df['column name'][i][7]='6':
        a=a+1   

如果我运行这段代码,我会收到错误“字符串索引超出范围”。有人可以帮我解决这个问题。 附言df 有大约 1000 万行

【问题讨论】:

  • 你能解释一下为什么你有一个 7 吗?除非我弄错了数组的格式应该是 array[column][row] 但最后一部分是什么意思?

标签: pandas dataframe for-loop if-statement


【解决方案1】:

如果索引大于或等于字符串的长度,则会发生此错误。

您可以检查字符串是否等于或大于7 个字符。

a=0
for i in range (0,len(df)):
    data = df['column name'][i]
    if len(data) > 6 and (data[7] != '1' or data[7] == '6'):
        a=a+1

你可以通过列表理解来做到这一点

can_count = lambda row: len(row['col']) > 6 and (row['col'][7] != '1' or row['col'][7] == '6')
a = sum((1 for _, row in df.iterrows() if can_count(row)))

需要注意的是df['column name'][i][7]='6' 应该是== 而不是=

【讨论】:

    【解决方案2】:

    我看到您在代码中使用了赋值运算符 '=' 而不是 '==' 。我已经复制粘贴了这一行来表明这一点。您能否重试并指出您最终得到的错误消息。另外,对您希望通过该操作实现的目标进行更多评论。

    
        if df['column name'][i][7]!='1' or df['column name'][i][7]='6':
            
    

    【讨论】:

      【解决方案3】:

      您能否为您的字符串添加一个示例?您的数据可能太短了。

      如果你使用这个:df['column name'][i][7],你的字符串至少应该有 8 个字符。

      祝你好运

      【讨论】:

      • 另外,您应该将 '=' 更改为 '=='
      • 欢迎玛丽亚,这和Praveen's answer不同吗?
      • Praveen 的代码中的@RichieV 看来代码应该超过 6 个字符(而不是 7 个)