You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Polars搜索DataFrame时非utf8列报SchemaMisMatch错误如何解决?

问题根源

当前代码的报错来自两个问题:

  1. 搜索逻辑统一调用.str.contains()方法,该方法仅能用于字符串类型的列,搜索数值、日期等非字符串列时就会抛出类型不匹配错误
  2. 参数解析存在拼写错误:-f参数的dest属性写为fils_input,但main函数中读取的是arguments.files_input,会直接触发属性不存在的报错
适配多类型列的修复方案

核心思路是搜索时先把目标列转为字符串类型,再做匹配,既兼容所有数据类型,也能保留正则搜索的能力,同时补充结果去重逻辑避免重复返回同一行。

完整修改后代码
#!/usr/bin/python
# Imports
import polars as pl
import argparse

### MAIN ###
def main():
    arguments = parse_arguments()
    dataframe = pl.read_parquet(arguments.files_input)
    result_df = dataframe_search(arguments, dataframe)
    # 可根据需求调整结果输出逻辑,比如导出到文件、打印到控制台
    print(result_df)

### MISC ###
def dataframe_search(arguments, dataframe) -> pl.DataFrame:
    dataframes = []
    for column in arguments.columns:
        for search_val in arguments.search:
            # 先将列转为字符串类型再做包含匹配,兼容所有数据类型
            filter_mask = pl.col(column).cast(pl.Utf8).str.contains(search_val)
            dataframes.append(dataframe.filter(filter_mask))
    # 拼接结果并去重,避免同一行被多个条件重复匹配
    return pl.concat(dataframes, how="diagonal").unique()

### ARGUMENTS ###
def parse_arguments():
    parser = argparse.ArgumentParser(
        prog='pqtmgr.py'
    )
    # 修正参数名拼写错误
    parser.add_argument(
        '-f',
        '--file-input',
        dest='files_input',
        help='Takes one filepath as input file which will be searched',
        required=True
    )
    parser.add_argument(
        '-c',
        '--columns',
        dest='columns',
        help='Accepts one or multiple columns that will be searched',
        nargs='*',
        required=True
    )
    parser.add_argument(
        '-s',
        '--search',
        dest='search',
        help='Accepts one or more strings or regular expression that are searched for in the given columns',
        nargs='*',
        required=True
    )
    return parser.parse_args()

# Execute Main
if __name__ == '__main__':
     main()
效果验证

原来的测试命令可以正常执行:
python ./pqtmgr.py -f './test.parquet' -c 'a' -s '2'
会返回a列值为2的整行数据,不会再抛出类型不匹配错误。

内容的提问来源于stack exchange,提问作者FrozenPie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:45:04