【问题标题】:for loop taking too long to produce/export output in Pythonfor 循环在 Python 中生成/导出输出的时间太长
【发布时间】:2017-05-12 02:14:48
【问题描述】:

这个问题是我今天早些时候提出的上一个问题for loop taking too long to produce output 的延续。正如在一条评论中告诉我的,我使用pandas 代替xlrd 来读取excel 文件。这是我写的程序 -

   import pandas as pd
   import numpy as np

   no_of_columns = 10000

   Book1 = pd.read_excel("D:\Python\Book1.xlsx",header=None,name=range(no_of_columns))
   Book2 = pd.read_excel("D:\Python\Book2.xlsx",header=None,name=range(no_of_columns))
   Book3 = pd.read_excel("D:\Python\Book3.xlsx",header=None,name=range(no_of_columns))


   for i in range(1,11001):
      for j in range(0,10000):
         if Book1.iloc[i,j] == 100 and Book2.iloc[i,j] == 150 and Book3.iloc[i,j] == 150:
            print 1
         else:
            print 0

但这也没有解决我遇到的问题。程序仍在运行(已经 5 小时),我在目录中导出的文本输出的大小仍然为 0 字节。再次,程序有什么问题吗?为什么我得到一个自执行开始以来大小一直相同的文件?我在 R 上运行过这种大型循环,但每次我开始以文本或 excel 格式导出输出时,我都会在我的目录中得到一个文件,该文件的大小随着循环的进行而不断增加。那么为什么这里没有发生呢?我应该在这里做什么?

【问题讨论】:

    标签: python pandas if-statement for-loop output


    【解决方案1】:

    IIUC:

    假设所有书的大小相同

    (Book1.eq(100) & Book2.eq(150) & Book3.eq(150)) * 1
    

    对评论的回应:

    我也是为了美学而写的。要复制您所做的并将结果保存到 csv,我会这样做:

    (Book1.eq(100) & Book2.eq(150) & Book3.eq(150)).stack().mul(1) \
        .to_csv('filename.csv', header=False, index=False)
    

    【讨论】:

    • 非常优雅的解决方案!
    • 我想用您建议的命令替换if 命令吗?还是我应该在某处添加它?
    • @Dark_Knight 在定义了Book1Book2Book3 之后,运行它或者将它分配给一个变量(比如df)。我假设您真的不想将每件事都打印到屏幕上。然后,如果您需要访问任何值,那么它的 df.iloc[i, j]
    • 谢谢!不,我不想要屏幕上的任何东西。我只想要一个包含所有 1 和 0 的文本文件。我想要一个只有一列的输出,就像循环一样(比较第一行的所有列,然后是第二行的所有列,然后是第三行,依此类推)。那么,这个命令会给我同样的结果吗?
    • @piRSquared 你好!我尝试了你的建议,但程序仍然连续运行了 10 个小时,我没有得到任何输出。这一次,实际上目录中并没有创建 csv 文件。
    猜你喜欢
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 2017-11-06
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多