在Python中读取非常大的Excel文件(使用pandas),大约有500,000行。

13 浏览
0 Comments

在Python中读取非常大的Excel文件(使用pandas),大约有500,000行。

我有一个14MB大小的Excel文件,包含五个工作表,我正在将其读入Pandas数据框中。尽管下面的代码可以运行,但需要9分钟的时间!有人有加快速度的建议吗?

import pandas as pd
def OTT_read(xl, site_name):
    df = pd.read_excel(xl.io, site_name, skiprows=2, parse_dates=0, index_col=0, usecols=[0, 1, 2], header=None, names=['date_time', f'{site_name}_depth', f'{site_name}_temp'])
    return df
def make_OTT_df(FILEDIR, OTT_FILE):
    xl = pd.ExcelFile(FILEDIR + OTT_FILE)
    site_names = xl.sheet_names
    df_list = [OTT_read(xl, site_name) for site_name in site_names]
    return site_names, df_list
FILEDIR = 'c:/downloads/'
OTT_FILE = 'OTT_Data_All_stations.xlsx'
site_names_OTT, df_list_OTT = make_OTT_df(FILEDIR, OTT_FILE)

0
0 Comments

问题的原因是读取非常大的Excel文件(约500,000行)时,使用pandas库的速度较慢。解决方法是尝试使用xls格式代替xlsx格式,因为在每个工作表中行数少于65536行时,xls格式比xlsx格式更快。这是一种不完美的解决方案,因为xls是一种旧的二进制专有格式,但在工作表很多、包含经常更新的内部公式或者出于其他原因希望保留Excel多工作表功能(而不是使用csv分隔文件)时,这种方法很有用。

0
0 Comments

在Python中读取非常大的Excel文件(使用pandas,约有500,000行)可能会遇到性能问题。为了解决这个问题,可以使用xlsx2csv将Excel文件在内存中虚拟转换为csv文件,这样可以将读取时间减少约一半。

以下是使用xlsx2csv和pandas读取Excel文件的代码示例:

from xlsx2csv import Xlsx2csv
from io import StringIO
import pandas as pd
def read_excel(path: str, sheet_name: str) -> pd.DataFrame:
    buffer = StringIO()
    Xlsx2csv(path, outputencoding="utf-8", sheet_name=sheet_name).convert(buffer)
    buffer.seek(0)
    df = pd.read_csv(buffer)
    return df

然而,上述代码可能已经过时。如果要使用这段代码,请尝试以下更新后的代码:

from xlsx2csv import Xlsx2csv
from io import StringIO
from openpyxl import load_workbook
import pandas as pd
def read_excel(path: str, sheet_index: int) -> pd.DataFrame:
    buffer = StringIO()
    Xlsx2csv(path, outputencoding="utf-8").convert(buffer, sheetid=sheet_index)
    buffer.seek(0)
    df = pd.read_csv(buffer, low_memory=False)
    return df

在我的测试中,使用`pd.read_excel(excel_file, sheet_name=None)`和使用`Xlsx2csv`版本之间的性能差异很小,有时`Xlsx2csv`会稍慢一些。我的文件有5个工作表,每个工作表有两列和约9,000行。

在我的实践中,使用`Xlsx2csv`可以节省大约40%的时间。

0
0 Comments

问题出现的原因是读取非常大的Excel文件(约500,000行)时,使用pandas库的read_excel函数速度较慢。为了解决这个问题,可以使用csv文件读取方法来提高速度。以下是解决方法的具体步骤:

1. 首先,需要在Windows系统上安装Excel,并在Python中使用pandas库来调用Excel。

2. 使用vbscript脚本将Excel文件转换为csv格式。可以创建一个ExcelToCsv.vbs脚本,其中包含将Excel文件转换为csv文件的代码。

3. 在Python中调用vbscript脚本,使用subprocess库中的call函数执行vbscript脚本,将Excel文件转换为csv文件。

4. 使用pandas的read_csv函数读取转换后的csv文件,将数据存储在DataFrame对象中。

如果在Linux系统上遇到相同的问题,解决方法如下:

将脚本中的文件写入模式从'w'更改为'wb',即将f = open('ExcelToCsv.vbs','w')更改为f = open('ExcelToCsv.vbs','wb'),以解决"TypeError: write() argument must be str, not bytes"错误。

这个解决方法受益于stackoverflow上的两个问题:Convert XLS to CSV on command linecsv & xlsx files import to pandas data frame: speed issue

0