我正在尝试使用在极坐标上应用来创建一个新列。
您能帮助我吗?谢谢!
尝试执行以下操作:
df = df.with_columns(
pl.col("AH_PROC_REALIZADO")
.apply(get_procedure_description)
.alias("proced_descr")
)
并收到错误:
AttributeError: 'Expr' object has no attribute 'apply'
我尝试应用的函数是:
def get_procedure_description(cod):
proceds = {
'41612' : 'CIRURGIA ONCOLOGICA',
'30401' : 'RADIOTERAPIA',
'30402' : 'QUIMIOTERAPIA',
'30408' : 'QUIMIOTERAPIA',
'410010057' : 'MASTECTOMIA RADICAL C/ LINFADENECTOMIA',
'410010065' : 'MASTECTOMIA SIMPLES',
'410010111' : 'SETORECTOMIA / QUADRANTECTOMIA',
'410010120' : 'SETORECTOMIA / QUADRANTECTOMIA C/ ESVAZIAMENTO GANGLIONAR',
'416020216' : 'LINFADENECTOMIA AXILAR UNILATERAL EM ONCOLOGIA ',
'416020240' : 'LINFADENECTOMIA SELETIVA GUIADA (LINFONODO SENTINELA) EM ONCOLOGIA',
'303130067' : 'TRATAMENTO DE PACIENTE SOB CUIDADOS PROLONGADOS POR ENFERMIDADES ONCOLOGICAS'
}
for proced in proceds.keys():
if cod[: len(proced)] == proced:
return proceds[proced]
return None
错误信息
"AttributeError: 'Expr' object has no attribute 'apply'"
说明你在尝试在一个 Polars 表达式 (
Expr
对象) 上使用
apply
方法,而 Polars 表达式并没有
apply
方法。
要解决这个问题,你可以使用
apply
函数
,而不是
apply
方法。
apply
函数可以作用于 Polars 表达式,并且可以接受一个 Python 函数作为参数。
以下是修改后的代码:
import polars as pl
def get_procedure_description(cod):
# ... (你的函数代码) ...
df = df.with_columns(
pl.col("AH_PROC_REALIZADO").apply(lambda x: get_procedure_description(x)).alias("proced_descr")
)
在这个代码中:
-
我们使用
pl.col("AH_PROC_REALIZADO")
选择了名为"AH_PROC_REALIZADO"
的列,它返回一个 Polars 表达式。 -
我们使用
apply
函数将get_procedure_description
函数应用于该列的每个元素。 -
我们使用 lambda 表达式将
get_procedure_description
函数包装起来,使其能够被apply
函数接受。 -
最后,我们使用
alias
方法将新列命名为"proced_descr"
。
另外一种方法
是使用
map
函数, 它可以更简洁地实现相同的功能:
df = df.with_columns(
pl.col("AH_PROC_REALIZADO").map(get_procedure_description).alias("proced_descr")
)
在这种情况下,你不需要使用 lambda 表达式,因为
map
函数可以直接接受一个 Python 函数作为参数。
这两种方法都可以实现你的目标,选择哪种方法取决于你的个人喜好。
标签:python,data-science,apply,data-analysis,python-polars From: 78813399