当前位置:首页>python>python库polars把内容替换为None的方法

python库polars把内容替换为None的方法

  • 2026-09-30 19:22:33
python库polars把内容替换为None的方法

公众号后台(不是评论区)回复关键字 西游记妖魔鬼怪全属性统计表 即可获取数据下载链接(无密码,后台自动回复的链接复制到浏览器)(长按关键字复制粘贴即可,不必手写)

用polars对某列(某些列)进行替换操作的时候,如果直接用str下面的方法替换,会报错。

列数少就直接print

列数多就输出到parquet文件格式,用duckdb直接打开看,方法可以参考这篇文章duckdb查看文件方法

原始数据预览

import polars as pl from polars import selectors as cspath_in = r"D:\《西游记》妖魔鬼怪全属性统计表(增量数值版).xlsx"# 比如这里把 结局 这个字段里面的 ”未知” 替换为 None(让它显示为Null ,不是 空值 ,'' != Null )df = (    pl.read_excel(path,sheet_name='一、取经前及早期妖王(第1–7回)')    .drop(['序号','战力','法力','防御'])    .with_columns(        pl.col('结局').str.replace_all(r'未知',None)    ))print(df)# 上面代码会报错,如下"""polars.exceptions.ComputeError: value cannot be 'null' in 'replace' expressionThis error occurred in the following expression: col(”结局”).str.replace([”未知”, null.cast(String)])"""

错误的意思是'replace'这个表达式不支持null(暂时,有可能后面版本就支持了,当前版本是1.41.2)

换成下面的写法就可以

import polars as pl from polars import selectors as cspath_in = r"D:\《西游记》妖魔鬼怪全属性统计表(增量数值版).xlsx"# 可以这样写路径,不过默认的地址要看你python安装地址,或者手动设置path_out = r'替换后.parquet'# 也可以明确指定,如# path_out = r'D:\替换后.parquet'df = (    pl.read_excel(path,sheet_name='一、取经前及早期妖王(第1–7回)')    .drop(['序号','战力','法力','防御'])    .with_columns(        # 这几个分别执行看,可以把其他的先注释         # 对某列进行替换 ,不用str下面的replace_all , 直接对series进行replace        pl.col('结局').replace('未知',None),        # 对文本列进行替换        cs.string().replace('不详',None),        # 自己明确知道要替换的列        pl.col(['洞府/所在地','武器/法宝']).replace('不详',None),        # 对所有列进行替换,此处需要确保所有列的类型都是文本的,如果有其他类型,依然报错,所以在上面有drop语句        # 可以把drop去掉看看是什么错误        pl.all().replace('不详',None),        # 支持连续替换         # python 里面的 polars 如下最后多个写逗号”,” , 没问题 ,rust里面不可以        # 为什么习惯在python里面加上这个逗号呢,因为复制的时候不想去处理逗号        pl.all().replace('不详',None).replace('未知',None),    ))df.write_parquet(path_out)

为什么这么写就可以呢?简单理解就是 polars 目前支持对整体(整列,series,名字没什么影响)进行替换None,不支持对局部单个进行替换None。

.str.replace_all() 这个就是对局部单个.replace() 这个就是对整体

.str.replace_all() 与 .replace() 函数本身的区别也有一些

比如是否支持正则表达式 ,替换前后的列是否支持表达式,是否可以用df里面已有的列等。

除此之外,还可以通过pl.when then otherwise来写,不过一般以上内容就可以了。

最新文章

随机文章