【问题标题】:Python ```while``` loop for comparing strings not working as it should be用于比较字符串的 Python ```while``` 循环不能正常工作
【发布时间】:2021-06-02 17:20:11
【问题描述】:

我正在尝试在名为 df1 的数据框中获取 [1,3] 处的值,并将其与另一个字符串进行比较;如果两个值相同,则将数据帧写入 csv 文件。 df1.iat[1,3] 的原始值,即 var c 是“Alayamon”。但即使我故意将字符串更改为“Alayaon”以检查它是否正常工作,它仍然会将数据帧写入 csv。如果值不同,我希望代码打印“等待...”并继续尝试读取数据帧,直到达到 df1.iat[1,3] 具有正确值的数据帧。关于我应该如何更改代码以便它仅在两个变量完全相同时写入数据帧的任何建议?

df1 = pd.read_csv(io.StringIO(dfs[4].to_csv(index=False)), skiprows=1, header=[0,1])
c = df1.iat[1,3]
        print(c)
       
        c == "Alayaon"
        while True:
            try:
                df1.to_csv("break.csv", index=False)
                break
            except:
                if x:
                    print("waiting...")
                    x = False```

【问题讨论】:

    标签: python python-3.x pandas loops while-loop


    【解决方案1】:

    c == "Alayaon"是比较不是分配,应该是c = "Alayaon"

    此外,您永远不会检查循环内的任何内容。照原样,您的循环将始终执行df1.to_csv("break.csv", index=False),除非它失败然后跳出循环。

    您需要将其更改为类似

    if(c == "Alayaon"):
        df1.to_csv("break.csv", index=False)
        break
    else:
        print("waiting...")
    
    if x:
        print("waiting...")
        x = False
    

    以上不会触发,因为您没有声明 x,应该会遇到错误。

    【讨论】:

    • 您好,按照您的建议,我将代码更改为以下while True: try: if(c == "Alayamon"): df1.to_csv('breakwithGP.csv', mode='a', header=False) print("GP1 over") break else: print("waiting...") except: print("not found")。现在它正在等待正确的数据帧,但即使出现正确的数据帧也不会将其读取到 csv 中。相反,它一直在打印“等待...”。如果不是太麻烦,你能再看看吗?
    • @adcadmin 好吧,由于某种原因,它似乎没有输入 if 语句,您是否检查过这些值是否真的匹配?区分大小写等。
    • 是的。它们是一回事。我复制并粘贴它以确保它。
    • 嗯,比较失败一定是有原因的,如果没有拼错,那么可能是类型错误。我会在该行设置一个断点并检查每个比较。如果我复制并粘贴您评论的内容,并在开始之前设置c = "Alayamon",它可以正常工作。
    • 在您发布的评论中,您没有更新循环内的 c 变量
    猜你喜欢
    • 2022-01-16
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2012-09-28
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    相关资源
    最近更新 更多