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

Python Polars中能否基于含Null值的列执行左连接?

在Polars中实现含Null键的安全连接(类似Spark EqSafeNull)

问题原因

你的连接操作失败,核心原因是两个DataFrame的key列数据类型不匹配:

  • dataframe1的key为字符串类型
  • dataframe2的key因全为Null,被Polars推断为Null类型
    对应的错误信息翻译为:*** exceptions.ComputeError: 连接键的数据类型不匹配

解决方案

要实现类似Spark EqSafeNull(将Null与Null视为相等)的连接逻辑,需分两步处理:

1. 统一连接键的数据类型

先将dataframe2的key列转换为与dataframe1一致的类型(此处为字符串):

import polars as pl

# 构造示例数据
dataframe1 = pl.DataFrame({
    "key": ["a", "b", "c"],
    "value": [1, 2, 3]
})

dataframe2 = pl.DataFrame({
    "key": [None, None, None],
    "value": [4, 5, 6]
})

# 统一key列数据类型
dataframe2 = dataframe2.with_columns(pl.col("key").cast(pl.String))

2. 自定义Null安全的连接条件

Polars默认不将Null视为相等,因此需要通过condition参数自定义匹配规则,实现Null与Null的匹配:

# 实现EqSafeNull逻辑:键值相等 或 两边均为Null
result = dataframe1.join(
    dataframe2,
    how="left",
    condition=(pl.col("key") == pl.col("key_right")) | (pl.col("key").is_null() & pl.col("key_right").is_null()),
    suffix="_right"
)

print(result)

结果说明

  • 针对你提供的示例数据,由于dataframe1的key无Null值,left join后不会匹配到dataframe2的行,结果与原dataframe1一致
  • 如果dataframe1的key包含Null值,这些Null行将与dataframe2的Nullkey行完成匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 20:42:12