Polars中apply自定义函数仅首行有效,后续返回null的问题求助
问题解决:Polars apply返回DataFrame后续行出现null
问题原因
Polars的df.apply()方法原本是用来处理每行返回标量或与输入列数匹配的序列,当你返回DataFrame这种复杂结构时,只有第一行能被正确解析,后续行的DataFrame会因类型不兼容被强制转为null。
解决方案
改用map_elements()方法,它专门支持每行返回任意复杂类型(包括DataFrame),同时需要显式指定返回类型为pl.DataFrame:
修改后的代码
import polars as pl import numpy as np def myfunc(x): data1 = np.random.uniform(low=0, high=25, size=(5,)) data2 = np.random.uniform(low=0, high=25, size=(5,)) df = pl.DataFrame([data1, data2]) return df df = pl.DataFrame({ 'val1': [1, 2, 3, 4, 5], 'val2': [1, 2, 3, 4, 5] }) # 使用map_elements替代apply,指定返回类型 output = df.map_elements(myfunc, return_dtype=pl.DataFrame) # 展开所有列 output = output.explode(output.columns) print('\nPolars\n',output)
解释
map_elements()会逐行处理输入,完整保留每行返回的DataFrame结构,不会因类型不兼容转为nullreturn_dtype=pl.DataFrame明确告知Polars每行返回的是DataFrame,确保类型解析逻辑正确- 后续的
explode()可以正常展开所有生成的行,得到完整的合并结果
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

