微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我如何知道分块前使用的csv文件中的分块数量或行数?

如何解决我如何知道分块前使用的csv文件中的分块数量或行数?

我正在尝试使用5.000.000的块大小使用熊猫处理10GB以上的csv文件。从块到块处理数据需要一些时间,但是我不知道我在文件的哪一部分。我如何在开始循环之前知道csv的块数量(或行数)?选择块大小是否有任何经验法则?

我正在使用的循环是这样的:

chunk = 5_000_000
data = pd.read_csv(path,chunksize=chunk)

for i in data:
     do_some_stuff()

解决方法

一些想法

  • 估计之前/不读取文件的行数
$csv2 | foreach {
    [PSCustomObject]@{
        Host     = $csv1[$_.vendorid].host
        Managed  = $_.managed
        VendorID = $_.vendorid
        Serial   = $csv1[$_.vendorid].serial
    }
}

Host Managed VendorID Serial 
---- ------- -------- ------ 
A15  Trancom 9001     gtjk123
C15  Stratus 6402     gtjk456
T15  Psycorp 2301     gtjk678
S15  Dell    0101     gtjk103
  • 估计数据帧块的可用内存
import os
import sys

full_size = os.path.getsize('test.csv')  # get size of file
with open('test.csv','rb') as f:
    next(f)                              # skip header
    line_size = len(f.readline())        # get size of one line,assuming 1 byte encoding
linecount = full_size // line_size + 1   # ~count of lines
  • 在循环中使用信息
import psutil

chunksize = (
     psutil.virtual_memory().available 
 // (pd.read_csv('test.csv',nrows=1).memory_usage(deep=True).sum()
     * 4)) # leave memory for computations,here: 1/4 of available memory for the dataframe

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。