【问题标题】:Writing output of a large dataset in excel in Python Pandas在 Python Pandas 中用 excel 编写大型数据集的输出
【发布时间】:2018-08-25 10:58:14
【问题描述】:

我有以下代码 sn-p 可帮助我将输出写入 excel 文件。如果数据集不是那么大(例如,多达 10 万条记录),这段代码可以正常工作。

但是如果我的数据集非常大,比如 1000 万条记录,那么这段代码就不能很好地工作。

那么,在这种情况下,我该怎么办 将数据集拆分为几个较小的数据集,同时将它们全部上传到一个文件中。目标是 在一个文件中获取所有数据。

import time


class WriteToExcel(object):

    def generate_report(self, output_data):
        timestr = time.strftime("%Y%m%d-%H%M%S")
        file_path = '/some/path/'
        file_name = 'file' + '_' + timestr + '.xlsx'

        try:
                        output_data.to_excel(file_path+file_name, index=False)
                        print("File generated named " + file_name + " at the location " + file_path)


        except IOError:
               print("Opps, I think file path is incorrect.")



## how to invoke the method
nis = WriteToExcel()
nis.generate_report(some_data)

【问题讨论】:

  • 将数据写入单个 csv 文件?除非您出于某种原因真的需要这种格式,否则创建 1000 万条记录的 Excel 文件并没有多大用处。
  • @TimWilliams 是的,需要将数据写入单个 csv 文件。有什么改进上述代码的建议吗?
  • 我不是 Python 人,但您似乎需要不同的代码来编写 CSV 文件?
  • output_data.to_csv(file_path+file_name, index=False)?我相信 excel 的行数限制约为 100 万。 What is the maximum allowed rows in a Microsoft Excel .xls or .xlsx
  • @gyoza 非常感谢。这是我一直在寻找的完美解决方案。欣赏它。

标签: excel pandas


【解决方案1】:

我只是将我在评论中写的解决方案重写为记录。

output_data.to_csv(file_path+file_name, index=False)

附带说明,如果您想在从保存位置重新读取 csv 时指定每列的 dtypes,请在使用 pd.read_csv 时手动设置 dtype 参数。下面是一个简短的例子:

import pandas as pd

df = pd.DataFrame().assign(a=range(3), b=list('abc'))
df.a = df.a.astype(str)
df.to_csv(filepath, index=False)

# str --> int conversion happens here, so manually prevent it if you want
df2 = pd.read_csv(filepath, dtype={'a': str})

>>> df2.dtypes
a    object
b    object
dtype: object

pandas在未指定时为每一列推断dtype,因此如果所有值从pandas看起来int时需要保持str格式,则需要手动设置它时被读取。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-09
    • 2021-10-29
    • 2011-11-05
    • 2016-04-04
    • 2017-11-16
    • 2014-02-15
    • 1970-01-01
    • 2020-04-03
    相关资源
    最近更新 更多