Code: Select all
import polars as pl
df = pl.DataFrame({
"name": ["Alice", "Bob", "Alice", "David", "Eve", "Bob", "Frank"],
"city": ["NY", "LA", "NY", "SF", "LA", "LA", "NY"],
"age": [25, 30, 25, 35, 28, 30, 40]
})
# Trying this:
df.filter((df.is_duplicated()) & (pl.col("city") == "NY")) # error
SchemaError: Kann Serie vom Typ Objekt nicht in bool entpacken
Was andeutet, dass df.is_duplicated() eine Reihe vom Typ Objekt zurückgibt, aber in Wirklichkeit ist es ein Boolescher Wert Serie.
Überraschenderweise funktioniert es, wenn man die Prädikate neu anordnet, indem man den Ausdruck zuerst platziert (aber warum?):
Code: Select all
df.filter((pl.col("city") == "NY") & (df.is_duplicated())) # works!Code: Select all
shape: (2, 3)
┌───────┬──────┬─────┐
│ name ┆ city ┆ age │
│ --- ┆ --- ┆ --- │
│ str ┆ str ┆ i64 │
╞═══════╪══════╪═════╡
│ Alice ┆ NY ┆ 25 │
│ Alice ┆ NY ┆ 25 │
└───────┴──────┴─────┘
Code: Select all
df.filter((pl.struct(df.columns).is_duplicated()) & (pl.col("city") == "NY")) # worksAllerdings verwende ich absichtlich nicht pl.struct, da mein echter Datenrahmen 40 Spalten hat und ich anhand aller Spalten außer drei nach doppelten Zeilen suchen möchte, also habe ich Folgendes getan:
Code: Select all
df.filter(df.drop("col1", "col2", "col3").is_duplicated())Code: Select all
df.filter(
(df.drop("col1", "col2", "col3").is_duplicated()) & (pl.col("col5") == "something")
) # breaks!
df.filter(
(pl.col("col5") == "something") & (df.drop("col1", "col2", "col3").is_duplicated())
) # works!
Ist dieses Verhalten in Polars beabsichtigt oder ein Fehler?
Mobile version