Sou*_*ili 2 python python-polars
一个愚蠢的问题。如何操作 Polars 中的列?
明确地说,我有一个包含 3 列的表: N ,幸存者,死亡
我想用 Deaths * N 替换 Deaths,用 Survivors * N 替换 Survivors
以下代码不起作用
table["SURVIVORS"] = table["SURVIVORS"]*table["N"]
Run Code Online (Sandbox Code Playgroud)
我有这个错误:
TypeError: 'DataFrame' object does not support 'Series' assignment by index. Use 'DataFrame.with_columns'
Run Code Online (Sandbox Code Playgroud)
谢谢
北极熊不是熊猫。
您不能分配 df 的一部分。换句话说, equals 的左侧必须是完整的 df 所以忘记这个语法table["SURVIVORS"]=
您将主要使用with_columns,select方法。第一个将根据您提供的表达式将列添加到现有的 df 中,而select只会返回您要求的内容。
就你而言,由于你想覆盖 SURVIVORS 和 DEATHS 同时保留 N 你会这样做:
table=table.with_columns([
pl.col('SURVIVORS')*pl.col('N'),
pl.col('DEATHS')*pl.col('N')
])
Run Code Online (Sandbox Code Playgroud)
如果您想重命名列,那么您可能会考虑这样做:
table=table.with_columns([
(pl.col('SURVIVORS')*pl.col('N')).alias('SURIVORS_N'),
(pl.col('DEATHS')*pl.col('N')).alias('DEATHS_N')
])
Run Code Online (Sandbox Code Playgroud)
在本例中,由于with_columns仅添加列,因此您仍将拥有原始的 SURVIVORS 和 DEATHS 列。
这又回到了select,如果您想显式控制返回的内容(包括顺序),则执行以下操作select:
table=table.select([ 'N',
(pl.col('SURVIVORS')*pl.col('N')).alias('SURIVORS_N'),
(pl.col('DEATHS')*pl.col('N')).alias('DEATHS_N')
])
Run Code Online (Sandbox Code Playgroud)
请注意,只要您不想对其执行任何操作,只需给出列名即可引用该列,例如上一示例中的“N”。如果你想用它做一些事情(数学、重命名、任何事情),那么你必须将它包装起来,pl.col('column_name')使它成为一个表达式。