操作 Polars 中的数据

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)

谢谢

Dea*_*gor 5

北极熊不是熊猫。

您不能分配 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')使它成为一个表达式。