如何更快地打开从熊猫创建的Excel文件?

时间:2019-03-26 11:58:09

标签: python excel python-3.x pandas

使用python创建的excel文件打开的速度非常慢,即使文件大小约为50 mb。

我已经尝试过熊猫和openpyxl。

  def to_file(列表报告,列表表,条列,名称):
    我= 0
    wb = ExcelWriter(path_output +'\\'+名称+日期格式+'.xlsx')
    当我<= len(list_report)-1时:
        尝试:
            df = pd.DataFrame(pd.read_csv(path_input +'\\'+ list_report [i] + reportdate +'.csv'))
            对于strip_column中的列:
                尝试:
                    df [column] = df [column] .str.strip('=(“”)')
                除了:
                    通过
            df = Adjust_report(df,list_report [i])
            df = df.apply(pd.to_numeric,错误=“忽略”,向下转换=“整数”)
            df.to_excel(wb,sheet_name = list_sheet [i],index = False)
        除了:
            打印(“缺少报告:'+ list_report [i])
        我+ = 1
    wb.save()
 

是否有加速的方法?

1 个答案:

答案 0 :(得分:0)

成语

让我们将list_report重命名为reports。 然后,您的while循环通常表示为:for i in range(len(reports)):

您多次访问第i个元素。循环可以用for i, report in enumerate(reports):为您绑定。

但是事实证明,您甚至不需要i。因此大多数人会这样写:for report in reports:

代码组织

这段代码非常好:

        for column in strip_column:
            try:
                df[column] = df[column].str.strip('=("")')
            except:
                pass

我建议您使用def strip_punctuation将其掩埋在辅助函数中。 (我认为列表应该是复数形式?strip_columns?) 然后,您将有一个简单的df分配序列。

定时

配置文件已过time()。用以下代码将每个df分配括起来:

    t0 = time()
    df = ...
    print(time() - t0)

这将向您显示处理流水线中哪个部分花费的时间最长,因此应该花费最大的精力来加快处理速度。

我怀疑adjust_report()用了大部分时间, 但看不到它很难说。