索引

Polars DataFrame没有索引,因此索引行为可以是一致的,而不需要 df.loc, df.iloc, or a df.at 操作。

规则如下(取决于值的数据类型):

  • 数值型

    • axis 0: 行(row)
    • axis 1: 列(column)
  • 数值型 + 字符串

    • axis 0: 行(这里只接收数字)
    • axis 1: 列(接受数字+字符串值)
  • 仅字符串

    • axis 0: 列(column)
    • axis 1: 报错(error)
  • 表达式

    所有表达式求值都是并行执行的

    • axis 0: 列(column)
    • axis 1: 列(column)
    • ..
    • axis n: 列(column)

与Pandas的对比

pandaspolars
选择列
df.iloc[2]
df[2, :]
按索引选择几行
df.iloc[[2, 5, 6]]
df[[2, 5, 6], :]
选择行的切片
df.iloc[2:6]
df[2:6, :]
使用布尔掩码(boolean mask)选择行
df.iloc[True, True, False]
df[[True, True, False]]
按谓词(predicate)条件选择行
df.loc[df["A"] > 3]
df[df["A"] > 3]
选择列的切片
df.iloc[:, 1:3]
df[:, 1:3]
按字符串顺序选择列的切片
df.loc[:, "A":"Z"]
df[:, "A":"Z"]
选择单个值(标量)
df.loc[2, "A"]
df[2, "A"]
选择单个值(标量)
df.iloc[2, 1]
df[2, 1]
选择单个值(Series或DataFrame)
df.loc[2, ["A"]]
df[2, ["A"]]
选择单个值 (Series或DataFrame)
df.iloc[2, [1]]
df[2, [1]]

表达式

表达式也可以用于索引(它是df.select的语法糖)。

这可以用来做一些很有别致的选择。

df[[
    pl.col("A").head(5),  # 从“A”的首部开始获取
    pl.col("B").tail(5).reverse(), # 以逆序的方式获取“B”的后部
    pl.col("B").filter(pl.col("B") > 5).head(5), # 首先得到满足谓词的“B”
    pl.sum("A").over("B").head(5) # 获取“A”在“B”组上的总和,并返回前5个