首页 > 编程问答 >如何使用 Polars scan_parquet 扫描 parquet 中的关键字列表

如何使用 Polars scan_parquet 扫描 parquet 中的关键字列表

时间:2024-07-24 06:12:47浏览次数:9  
标签:python pytorch parquet

我有一个包含类别元数据的镶木地板文件。我想使用极地中的 scan_parquet 扫描此镶木地板文件,如下所示:

filtered_df = (
            pl.scan_parquet(parquet_file)
                .filter(pl.col("CATEGORIES").str.contains("people", literal=True) | pl.col("CATEGORIES").str.contains("nature", literal=True) | pl.col("CATEGORIES").str.contains("urban", literal=True)) | ....
                .filter(pl.col("MAX_WIDTH") >= HORIZONTAL_RES)
                .filter(pl.col("MAX_HEIGHT") >= VERTICAL_RES)
                .collect()
            )

我有一个类别列表
['nature, 'people,'urban', ..... 'n_categories]

如何我在该扫描镶木地板中编写过滤条件以检查每个类别,如上面的示例所示。该列表并不总是固定的,因为它取决于用户输入。

我没有尝试任何操作,因为我不知道如何用迭代类别列表的 for 循环替换这一行。

.filter(pl.col("CATEGORIES").str.contains("people", literal=True) | pl.col("CATEGORIES").str.contains("nature", literal=True) | pl.col("CATEGORIES").str.contains("urban", literal=True))

可以使用循环和 reduce 函数动态构建过滤器表达式,以扫描包含关键字列表的镶木地板。

import polars as pl
from functools import reduce

def filter_by_categories(parquet_file, categories):
  """
  使用类别列表过滤镶木地板文件。

  Args:
      parquet_file: 镶木地板文件的路径。
      categories: 要过滤的类别列表。

  Returns:
      过滤后的 polars DataFrame。
  """

  # 使用列表推导创建一个过滤器表达式的列表
  filters = [pl.col("CATEGORIES").str.contains(category, literal=True) for category in categories]

  # 使用 reduce 函数将所有过滤器表达式与 OR 运算符组合
  combined_filter = reduce(lambda a, b: a | b, filters)

  # 使用 Polars 扫描镶木地板文件并应用过滤器
  filtered_df = (
      pl.scan_parquet(parquet_file)
      .filter(combined_filter)
      .filter(pl.col("MAX_WIDTH") >= HORIZONTAL_RES)
      .filter(pl.col("MAX_HEIGHT") >= VERTICAL_RES)
      .collect()
  )

  return filtered_df

# 示例用法
categories = ['nature', 'people', 'urban']
parquet_file = 'path/to/your/file.parquet'

filtered_df = filter_by_categories(parquet_file, categories)
print(filtered_df)

此代码的工作原理:

  1. 创建一个过滤器表达式列表: 它使用列表推导来遍历 categories 列表,并为每个类别创建一个 pl.col("CATEGORIES").str.contains(category, literal=True) 过滤器表达式。
  2. 组合过滤器表达式: 它使用 reduce 函数和 lambda 函数将所有过滤器表达式与 OR 运算符 ( | ) 组合成一个表达式。
  3. 应用过滤器: 将组合的过滤器表达式应用于 pl.scan_parquet ,然后像往常一样应用其他过滤器。

现在,有一个灵活的函数,可以接受任何类别列表来过滤的镶木地板文件。

标签:python,pytorch,parquet
From: 78785761

相关文章

  • 在pip包中分发pythonnet dll类型信息
    我已经能够使用C#通过以下方式加载pythonnetdll:fromimportlib.resourcesimportpathimportsys#Assuming'my_package.lib'isthesub-packagecontainingtheDLLswithpath('pyrp.lib','')aslib_path:sys.path.append......
  • 尝试使用 pyinstaller 将 python 文件转换为可执行文件时出现 TypeError
    稍后的目的是通过命令行向GPT4all发送问题并将答案存储在文本文档中。我想将阻止代码转换为exe,但它产生了TypeError。这是到目前为止的代码:fromgpt4allimportGPT4Allmodel=GPT4All("Meta-Llama-3-8B-Instruct.Q4_0.gguf",device='cpu')#downloads/loads......
  • 使用 Python-PlexAPI 获取 plex 上所有好友的关注列表
    有关如何接收我的plex服务器上所有用户的监视列表的任何提示。我正在根据一些规则创建自动删除,其中一个规则是,如果电影位于用户观看列表中,则不应删除该电影。我遇到了麻烦,因为所有与观看列表相关的内容都在MyPlexAccount上。lexapi.myplex.MyPlexAccount具有我的用......
  • 使用 RNN 生成 PyTorch 路径 - 与输入、输出、隐藏和批量大小混淆
    我遵循了关于使用RNN生成句子的教程,并且尝试修改它以生成位置序列,但是我在定义正确的模型参数(例如input_size、output_size、hidden_​​dim、batch_size)时遇到了麻烦。背景:我有596个x,y位置序列,每个序列看起来像[[x1,y1],[x2,y2],...,[xn,yn]]。每个序列代表车......
  • 如何在 Python 中查看与 Azure OpenAI 助手关联的所有上传文件?
    我正在使用Python对文档中的问题进行基准测试,并在jupyter笔记本中实例化了我的助手。我想确认助手是否有我上传的文件,但似乎找不到有关此功能将使用什么功能的文档。使用适用于AzureOpenAI的最新版本的PythonAPI。目前,无法使用AzureOpenAI的PythonAPI直接查看......
  • 如何在Python中计算小数?
    我正在创建一个计算器来用python计算企业的利润,但到目前为止我只能使用整数。这是我的代码示例:Gross=int(input("PleaseentertotalGrossRevenuefortheFiscalYear"))NetTaxes=int(Gross)*0.1所以我将会计年度的总收入乘以按“税率”计算,但我只能使用......
  • 如何使用 Python 打开 Google Firestore 上的特定数据库?
    我正在使用Firebase并使用以下代码从Firestore设置/检索文档:importfirebase_adminfromfirebase_adminimportcredentials,firestorecred=credentials.ApplicationDefault()firebase_admin.initialize_app(cred,options={"projectId":"huq-jimbo"})fires......
  • 如何使用 Python 和 Numpy 重现 Matlab 文件读取以解码 .dat 文件?
    我有一个Matlab脚本,可以读取编码的.dat文件,对其进行解码并保存。我试图使用numpy将其转换为Python。我发现对于同一个文件,我得到不同的输出结果(python数字没有意义)。该代码最初作为从串行端口读取的脚本的一部分运行,因此是数据的结构。我首先认为位移是问题所在,因为......
  • 在Python中调整pdf页面大小
    我正在使用python裁剪pdf页面。一切正常,但如何更改页面大小(宽度)?这是我的裁剪代码:input=PdfFileReader(file('my.pdf','rb'))p=input.getPage(1)(w,h)=p.mediaBox.upperRightp.mediaBox.upperRight=(w/4,h)output.addPage(p)当我裁剪页面时,我也需要......
  • 如何使用 python 更改资源管理器窗口中的路径?
    没有人知道如何在不使用python打开新实例的情况下更改资源管理器窗口中的当前路径吗?例如,如果用户使用C:\Users\User打开资源管理器窗口。然后我必须将该路径更改为C:\Windows\System32例如。提前致谢。很遗憾,无法直接使用Python更改现有文件资源管理器窗口的......