在Python中运行for循环:第一次它运行正常,但其余的运行不正常

2024-10-04 03:25:32 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个公式,它根据一个列(在csv文件中)中的一个数字是大于还是小于我的“截止”数字来替换它。并将输出值保存到文档中。第一次运行正常,给了我正确的值。但在接下来的几个循环中,输出值都是0。(而不是1和0的混合)

df是我的csv文件中的一个长的数字文档

d =  df_gsuvr # same name as previous
df = pd.DataFrame(data=d)

list = [1.18, 1.12, 1.083, 1, 0.83]
for number in list:
#evaluate the number under the 'y' column according to 'number'
    df['y'] = df.apply(lambda x: "1" if float(x['y']) > number else "0", axis=1)
    df.to_csv(f"{number}.csv", index = True, header = True)

我没有收到任何代码错误消息。运行完成后,它总是说“processfinished with exit code 0”,但是列表中2-4个值的输出将创建一个0的文档(表示文档中的所有数字都是<;0.83,这是完全错误的)


Tags: 文件csvthetoname文档truenumber
2条回答

问题是在第一个循环中修改了df文件。在第一次循环之后,列df['y']只包含0或1。这就是为什么在第一个循环之后只有0。你知道吗

您可以通过在临时df上执行操作来解决问题。下面是它的样子:

d =  df_gsuvr # same name as previous
df = pd.DataFrame(data=d)
df_temp = df.copy()

list = [1.18, 1.12, 1.083, 1, 0.83]
for number in list:
#evaluate the number under the 'y' column according to 'number'
    df_temp['y'] = df.apply(lambda x: "1" if float(x['y']) > number else "0", axis=1)
    df_temp.to_csv(f"{number}.csv", index = True, header = True)

您可以以不同的方式使用apply方法。我创建了一个示例数据帧:

d =  [0.2, 1, 3] 
df = pd.DataFrame(data=d, columns=['A'])

看起来是这样的:

    A
0   0.2
1   1.0
2   3.0

所以结果可以重现:

my_list = [1.18, 1.12, 1.083, 1, 0.83]
for number in my_list:
    #evaluate the number under the 'y' column according to 'number'
    df['y'] = df['A'].apply(lambda x: 1 if float(x) > number else 0)
    df.to_csv(f"{number}.csv", index = True, header = True)

PS:您可能还想使用整数10,而不是字符串"1""0"。你知道吗

相关问题 更多 >