当前位置: 首页 > 知识库问答 >
问题:

如何从大型xlsx文件中加载pandas数据帧的进度条?

戈安翔
2023-03-14

来自https://pypi.org/project/tqdm/:

import pandas as pd
import numpy as np
from tqdm import tqdm

df = pd.DataFrame(np.random.randint(0, 100, (100000, 6)))
tqdm.pandas(desc="my bar!")p`
df.progress_apply(lambda x: x**2)

我获取了这段代码并对其进行了编辑,以便从load_excel创建数据帧,而不是使用随机数:

import pandas as pd
from tqdm import tqdm
import numpy as np

filename="huge_file.xlsx"
df = pd.DataFrame(pd.read_excel(filename))
tqdm.pandas()
df.progress_apply(lambda x: x**2)

这给了我一个错误,所以我将df.progress_apply改为:

df.progress_apply(lambda x: x)

这是最终代码:

import pandas as pd
from tqdm import tqdm
import numpy as np

filename="huge_file.xlsx"
df = pd.DataFrame(pd.read_excel(filename))
tqdm.pandas()
df.progress_apply(lambda x: x)

这会产生一个进度条,但它实际上并不显示任何进度,而是加载进度条,当操作完成时,它会跳到100%,从而达到目的。

我的问题是:如何让这个进度条工作?
progress_apply中的函数实际上是做什么的?
有更好的方法吗?也许是tqdm的替代品?

任何帮助都非常感谢。

共有3个答案

夏炎彬
2023-03-14

免责声明:这仅适用于xlrd引擎,未经全面测试!

它是如何工作的?我们对< code > xlrd . xlsx . x12 sheet . own _ process _ stream 方法进行猴子修补,该方法负责从类似文件的流中加载工作表。我们提供自己的流,其中包含我们的进度条。每个工作表都有自己的进度条。

当我们需要进度条时,我们使用< code > load _ with _ progress bar()上下文管理器,然后执行< code>pd.read_excel('

import xlrd
from tqdm import tqdm
from io import RawIOBase
from contextlib import contextmanager


class progress_reader(RawIOBase):
    def __init__(self, zf, bar):
        self.bar = bar
        self.zf = zf

    def readinto(self, b):
        n = self.zf.readinto(b)
        self.bar.update(n=n)
        return n


@contextmanager
def load_with_progressbar():

    def my_get_sheet(self, zf, *other, **kwargs):
        with tqdm(total=zf._orig_file_size) as bar:
            sheet = _tmp(self, progress_reader(zf, bar), **kwargs)
        return sheet

    _tmp = xlrd.xlsx.X12Sheet.own_process_stream

    try:
        xlrd.xlsx.X12Sheet.own_process_stream = my_get_sheet
        yield
    finally:
        xlrd.xlsx.X12Sheet.own_process_stream = _tmp


import pandas as pd

with load_with_progressbar():
    df = pd.read_excel('sample2.xlsx')

print(df)

进度条截图:

轩辕翰
2023-03-14

这可能对有类似问题的人有所帮助。在这里你可以得到帮助

例如:

for i in tqdm(range(0,3), ncols = 100, desc ="Loading data.."): 
    df=pd.read_excel("some_file.xlsx",header=None)
    LC_data=pd.read_excel("some_file.xlsx",'Sheet1', header=None)
    FC_data=pd.read_excel("some_file.xlsx",'Shee2', header=None)    
print("------Loading is completed ------")
王佐
2023-03-14

将不起作用。pd.read_excel块,直到文件被读取,并且在执行期间无法从该函数获取有关其进度的信息。

它适用于读取操作,您可以按块进行读取,比如

chunks = []
for chunk in pd.read_csv(..., chunksize=1000):
    update_progressbar()
    chunks.append(chunk)

但据我所知,tqdm还需要提前获得块的数量,因此对于propper进度报告,您需要先阅读完整的文件。

 类似资料:
  • 我有一个大的。xlsx文件(141 MB,包含293413行,每行62列),我需要在其中执行一些操作。 我在加载此文件时遇到问题(

  • 作为一个长期的SAS用户,我正在探索切换到python和pandas。 然而,在今天运行一些测试时,我很惊讶python在尝试一个128MB的csv文件时内存耗尽。它大约有200,000行和200列,大部分是数字数据。 使用SAS,我可以将csv文件导入SAS数据集,并且它可以和我的硬盘一样大。 中有类似的内容吗? 我经常处理大文件,没有访问分布式计算网络的权限。

  • 我想从InstaCart https://www.InstaCart.com/datasets/grocery-shopping-2017加载大型.csv(3.4百万行,20.6万用户)开源数据集 基本上,我在将orders.csv加载到Pandas数据帧中时遇到了麻烦。我想学习将大文件加载到Pandas/Python中的最佳实践。

  • 问题内容: 我有一个数据框,如下所示:框的形状是(1510,1399)。列代表产品,行代表用户为给定产品分配的值(0或1)。如何计算jaccard_similarity_score? 我创建了一个占位符数据框,列出了产品与产品 我不确定如何通过data_ibs进行迭代以计算相似性。 问题答案: 简短且向量化(快速)的答案: 从scikit的成对距离使用“汉明”学习: 说明: 假设这是您的数据集:

  • 如何将MS excel(.xlsx)文件从google drive导入colaboratory? 不起作用(是一个对象)。但是, 返回无。和 抛出: ()中的TypeErrorTraceback(最近一次调用)---- _io。BytesIO对象不可调用 我的意图是(给定一些有效的文件'id')将其导入为一个io对象,它可以被熊猫读取,并最终从中获得一个熊猫数据帧。

  • 我正在读麦金尼的数据分析书,他共享了150MB文件。虽然这个主题已经在进度条上进行了广泛的讨论,而下载文件超文本传输协议与请求,我发现在接受的答案中的代码抛出一个错误。我是初学者,所以我无法解决这个问题。 我想下载以下文件: 以下是没有进度条的代码: 这很有效,但是因为没有进度条,我想知道发生了什么。 下面是通过http下载带有请求的文件时从进度条改编的代码,以及如何使用python下载带有请求的