【问题标题】:Running a for loop in Python: first time it runs through properly, but rest of the runs do not run properly在 Python 中运行 for 循环:第一次正常运行,但其余运行未正常运行
【发布时间】:2019-12-07 22:44:11
【问题描述】:

所以我有一个方程式,它根据是否大于或小于我的“截止”数字来替换列(在 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)

我没有收到有关代码的任何错误消息。当它完成运行时,它总是说“进程以退出代码 0 完成”,但列表中第 2-4 个值的输出将创建一个 0 的文档(表明文档中的所有数字都

【问题讨论】:

  • 你有一个例子说明 csv 文件中的数据是什么?
  • csv文件数据全是数字!

标签: python pandas loops for-loop


【解决方案1】:

问题在于,在您的第一个循环中,您修改了 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)

【讨论】:

  • 非常感谢,我用了这个,效果很好!非常感谢您抽出时间来帮助我:)
【解决方案2】:

您可以以不同的方式使用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"

【讨论】:

  • 非常感谢您的解决方案!我肯定会考虑使用整数而不是字符串! :)
猜你喜欢
  • 2020-12-18
  • 1970-01-01
  • 2015-10-03
  • 1970-01-01
  • 2022-11-23
  • 2015-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多