【问题标题】:Python: loop through excel sheets and write to csvPython:循环遍历 excel 工作表并写入 csv
【发布时间】:2020-05-21 01:32:36
【问题描述】:

我有一个非常大的数据集 (>100gb)。它有许多 excel 文件 (.xlsx)。每个 xlsx 文件都有许多工作表。每张表中的数据如下图所示。

我想将这些工作表合并成一个 csv 文件,并将这种宽格式更改为长格式,以便:

  1. 第一列包含excel文件名,
  2. 第二列包含工作表的名称,
  3. 第三、四、五为上图中的“ticker”、“Name”、“Detail Holding Type”列,
  4. 第六列是“日期”(第一行),
  5. 最后一列包含数字。

最有效的方法是什么?我有循环文件和工作表的代码,但无法将(宽)数据转换为我所追求的长格式。以下是我的循环尝试:

import csv
from os import listdir
from os.path import isfile, join

mypath = "E:/data_download/Python_test_files/"
file_lists = [f for f in listdir(mypath) if isfile(join(mypath, f))]
import xlrd


for file in file_lists:
    book = xlrd.open_workbook(f'{mypath}{file}')
    sheet_names = book.sheet_names()
    print(sheet_names)
    for sheet in book.sheets():
        for row in sheet.get_rows():

【问题讨论】:

  • 这是一个非常(可能过于)广泛的问题,因此您可能不会得到您希望的答案。您几乎已经编写了伪代码:对于每个 xlsx 文件:打开文件,提取所需的列,然后保存为 csv。对于大型数据集,您可能需要考虑保存到数据库而不是 csv。
  • 是的,但我需要 csv 格式,以便可以导入 SAS。编辑帖子以缩小问题范围

标签: python python-3.x


【解决方案1】:

一步一步来(请记住,为了使过程尽可能快,您必须尽可能多地使用本机 Python,并且仅在绝对必须时才使用其他库。) : 所以你想要从所有这些表中取出一个 csv 文件。你应该做的是首先对所有工作表中的所有行制作一个 2D list,但是你希望它们像你提到的那样构造,你想要包含在 csv 文件中,然后最后将它们导入到使用 pandas 库的带有 Dataframe 类的 csv 文件:

import pandas as pd
my_list = [...] # your 2D list containing the rows
dataset= pd.DataFrame(my_list, columns=['column1','column2', '...') # the name of your columns
dataset.to_csv('/PATH/file.csv')

【讨论】:

  • 感谢您的回复。我不想做计算,所以我认为使用数据框需要更长的时间。我只是读入一些数据并将其写为 csv。我已经通过文件、工作表、行和列的一些循环来完成这个
猜你喜欢
  • 2020-04-05
  • 1970-01-01
  • 2019-04-06
  • 2021-01-22
  • 2013-08-17
  • 2014-11-15
  • 2016-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多