加载 pandas 数据帧,其块大小由列变量确定

2023-11-27

如果我有一个太大而无法用 pandas 加载到内存中的 csv 文件(在本例中为 35gb),我知道可以使用 chunksize 分块处理该文件。

但是我想知道是否可以根据列中的值更改块大小。

我有一个 ID 列,然后每个 ID 都有几行包含信息,如下所示:

ID,   Time,  x, y
sasd, 10:12, 1, 3
sasd, 10:14, 1, 4
sasd, 10:32, 1, 2
cgfb, 10:02, 1, 6
cgfb, 10:13, 1, 3
aenr, 11:54, 2, 5
tory, 10:27, 1, 3
tory, 10:48, 3, 5
ect...

我不想将 ID 分成不同的块。例如,将处理大小为 4 的块:

ID,   Time,  x, y
sasd, 10:12, 1, 3
sasd, 10:14, 1, 4
sasd, 10:32, 1, 2
cgfb, 10:02, 1, 6
cgfb, 10:13, 1, 3 <--this extra line is included in the 4 chunk

ID,   Time,  x, y
aenr, 11:54, 2, 5
tory, 10:27, 1, 3
tory, 10:48, 3, 5
...

是否可以?

如果没有,也许使用带有 for 循环的 csv 库,如下所示:

for line in file:
    x += 1
    if x > 1000000 and curid != line[0]:
        break
    curid = line[0]
    #code to append line to a dataframe

尽管我知道这只会创建一个块,并且 for 循环需要很长时间来处理。


如果逐行迭代 csv 文件,您可以yield具有依赖于任何列的生成器的块。

工作示例:

import pandas as pd

def iter_chunk_by_id(file):
    csv_reader = pd.read_csv(file, iterator=True, chunksize=1, header=None)
    first_chunk = csv_reader.get_chunk()
    id = first_chunk.iloc[0,0]
    chunk = pd.DataFrame(first_chunk)
    for l in csv_reader:
        if id == l.iloc[0,0]:
            id = l.iloc[0,0]
            chunk = chunk.append(l)
            continue
        id = l.iloc[0,0]
        yield chunk
        chunk = pd.DataFrame(l)
    yield chunk

## data.csv ##
# 1, foo, bla
# 1, off, aff
# 2, roo, laa
# 3, asd, fds
# 3, qwe, tre
# 3, tre, yxc   

chunk_iter = iter_chunk_by_id("data.csv")

for chunk in chunk_iter:
    print(chunk)
    print("_____")

Output:

   0     1     2
0  1   foo   bla
1  1   off   aff
_____
   0     1     2
2  2   roo   laa
3  2   jkl   xds
_____
   0     1     2
4  3   asd   fds
5  3   qwe   tre
6  3   tre   yxc
_____
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

加载 pandas 数据帧,其块大小由列变量确定 的相关文章

随机推荐

  • mysqldump 仅转储具有特定前缀的数据库

    我有大约 100 个不同的数据库 我想使用 mysqldump 转储以前缀 asd 开头的数据库 我尝试了这个 但它不起作用 mysqldump u user p pwd h server url asd single transactio
  • 在 Swift 中更改导航栏颜色

    我使用选择器视图来允许用户选择整个应用程序的颜色主题 我计划更改导航栏 背景和可能的选项卡栏的颜色 如果可能的话 我一直在研究如何做到这一点 但找不到任何 Swift 示例 谁能给我一个我需要用来更改导航栏颜色和导航栏文本颜色的代码示例 选
  • Angular 2 - Jquery | Angular 2 - Jquery | Angular 2 - Jquery | Angular 2 - Jquery使用鼠标位置添加样式(上/左)

    我正在寻找一种在 Angular 2 中的特定位置 鼠标事件 x y 添加 div 组件的方法 https jsfiddle net lennartquerter w2c7uqw6 this xPos xPos this yPos yPos
  • 在 Vim 中映射 Esc 键

    I m a beginning Vim user I hate pressing the Esc key which is a little far on my T61 In order to return to command mode
  • Android:EditText 中多行且无自动建议

    是否可以有一个允许多行且不显示建议的 EditText 我尝试使用以下代码 android inputType textFilter textMultiLine 我在这个中看到了question 但这对我不起作用 如果我尝试同时使用两者 E
  • 使用 Lodash 将 JavaScript 数组拆分为块

    我需要将 JavaScript 数组拆分为n大小的块 例如 给定这个数组 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 and a n等于 4 输出应该是这样的 a1 a2 a3 a4 a5 a6 a
  • Jquery——任何事件都会触发动作[重复]

    这个问题在这里已经有答案了 jquery 中是否有任何事件触发时会触发函数的东西 我想要这样的东西 anyEvent function error html on blur change click dblclick error focus
  • WKWebView reload() 无法刷新当前页面

    离线时第一次加载网页失败 然后我连接网络呼叫reload 刷新当前页面 但这不起作用 WKNavigationDelegate无法得到任何回调 功能reloadFromOrigin 也不工作 但医生说 abstract Reloads th
  • .net mvc 中从 Bootstrap 3.7 更新到 5.0.2 产生错误 - System.NullReferenceException

    我卸载了 net MVC 应用程序附带的基本引导模板 并从 NuGetPackage Manager 安装了引导程序 5 0 2 现在我在运行时遇到这个问题 构建正在成功发生 System NullReferenceException HR
  • 在 F# 中将列表拆分为两个相等的列表

    我对 F 确实很陌生 我需要一些关于 F 问题的帮助 我需要实现一个剪切函数 将列表分成两半 以便输出 切 1 2 3 4 5 6 val it int 列表 int 列表 1 2 3 4 5 6 我可以假设列表的长度是偶数 我还希望定义一
  • AutoMapper 如何根据上下文以不同方式将对象 A 映射到对象 B

    呼叫所有 AutoMapper 专家 我希望能够根据运行时的上下文以不同的方式将对象 A 映射到对象 B 特别是 我想忽略一种映射情况下的某些属性 并在另一种情况下映射所有属性 我遇到的是 Mapper CreateMap 可以在不同的映射
  • 是否可以关闭特定更新的休眠版本增量?

    是否可以使用休眠更新数据库中的实体而不修改实体的版本 使用我的 Web 应用程序 用户可以创建或更新实体 在任何用户操作之后 处理 这些实体的另一个异步进程在哪里 如果用户在实体 处理 之前打开实体进行更新 但在 处理 之后尝试保存实体 则
  • 在构建期间自动化 xsd.exe

    我需要一种在构建期间基于 xsd 文件自动重新生成 cs 文件的方法 最好不涉及任何自定义加载项 这也需要在 CI 构建上运行 我不确定我是否遗漏了一些明显的东西 或者这在我看来真的很棘手吗 我使用这个脚本 echo off cd 1 ca
  • 从 Typescript 中的 http url 导入 ES6 模块

    我正在编写一个 ES6 模块 它依赖于使用 http url 指定的其他 ES6 模块 如下所示 import el mount from https cdnjs cloudflare com ajax libs redom 3 26 0
  • 将闭合曲线拟合到一组点

    我有一组点pts形成一个循环 看起来像这样 这有点类似于31243002 但我不想将点放在点对之间 而是想通过点拟合一条平滑的曲线 坐标在问题末尾给出 所以我尝试了类似的方法scipy文档关于插值法 values pts tck inter
  • Sklearn - 如何预测所有目标标签的概率

    我有一个包含目标变量的数据集 可以有 7 个不同的标签 我的训练集中的每个样本只有一个目标变量标签 对于每个样本 我想计算每个目标标签的概率 所以我的预测将由每行 7 个概率组成 在sklearn网站上我读到了有关多标签分类的内容 但这似乎
  • Windows 应用商店 - 拉伸图标

    我在 Windows 商店中遇到了一个小问题 我已在提交中上传了所有必需的图形 并且该应用程序具有所有必需的图形 包括框和平铺图像 然而 在商店中 应用程序入口使用的是宽图像 问题是它使用的宽图像实际上是一个被拉伸的框图像 有什么想法出了什
  • 使用 .NET SDK 按路径获取 Microsoft Graph Drive 项目

    因为它是有记录的 使用 Microsoft Graph REST API 您可以 以及其他选项 通过 ID 或路径获取项目 这工作正常 正如预期的那样 GET me drive items item id children GET me d
  • WPF:禁用列表框,但启用滚动

    整个早上我都在用头撞这个问题 基本上 我有一个列表框 我希望防止人们在长时间运行的过程中更改选择 但允许他们仍然滚动 解决方案 所有的答案都很好 我选择了吞咽鼠标事件 因为这是最直接的 我将 PreviewMouseDown 和 Previ
  • 加载 pandas 数据帧,其块大小由列变量确定

    如果我有一个太大而无法用 pandas 加载到内存中的 csv 文件 在本例中为 35gb 我知道可以使用 chunksize 分块处理该文件 但是我想知道是否可以根据列中的值更改块大小 我有一个 ID 列 然后每个 ID 都有几行包含信息