Skip to content

Commit

Permalink
Merge pull request #210 from markfairbanks/pl-v0.14.0-compat
Browse files Browse the repository at this point in the history
Polars v0.14.0 compatibility
  • Loading branch information
markfairbanks authored Aug 18, 2022
2 parents 6803f0d + 9a67916 commit 0218f8c
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 44 deletions.
38 changes: 18 additions & 20 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ readme = "README.md"

[tool.poetry.dependencies]
python = ">=3.7,<3.11"
polars = ">=0.13.44,<0.14.0"
polars = ">=0.14.0"

[tool.poetry.dev-dependencies]
pytest = "^6.2.5"
Expand Down
59 changes: 36 additions & 23 deletions tidypolars/tibble.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ def arrange(self, *args):
"""
exprs = _as_list(args)
desc = [True if isinstance(expr, DescCol) else False for expr in exprs]
return super().sort(exprs, reverse = desc)
return super().sort(exprs, reverse = desc).pipe(from_polars)

def bind_cols(self, *args):
"""
Expand Down Expand Up @@ -143,7 +143,7 @@ def bind_rows(self, *args):

def clone(self):
"""Very cheap deep clone"""
return super().clone()
return super().clone().pipe(from_polars)

def count(self, *args, sort = False, name = 'n'):
"""
Expand Down Expand Up @@ -194,7 +194,7 @@ def distinct(self, *args):
df = super().unique()
else:
df = super().select(args).unique()
return df
return df.pipe(from_polars)

def drop(self, *args):
"""
Expand All @@ -211,7 +211,7 @@ def drop(self, *args):
"""
args = _as_list(args)
drop_cols = self.select(args).names
return super().drop(drop_cols)
return super().drop(drop_cols).pipe(from_polars)

def drop_null(self, *args):
"""
Expand All @@ -233,7 +233,7 @@ def drop_null(self, *args):
out = super().drop_nulls()
else:
out = super().drop_nulls(args)
return out
return out.pipe(from_polars)

def head(self, n = 5, *, by = None):
"""Alias for `.slice_head()`"""
Expand Down Expand Up @@ -267,11 +267,19 @@ def fill(self, *args, direction = 'down', by = None):
options = {'down': 'forward', 'up': 'backward'}
if direction in ['down', 'up']:
direction = options[direction]
exprs = [arg.fill_null(direction) for arg in args]
exprs = [arg.fill_null(strategy = direction) for arg in args]
elif direction == 'downup':
exprs = [arg.fill_null('forward').fill_null('backward') for arg in args]
exprs = [
arg.fill_null(strategy = 'forward')
.fill_null(strategy = 'backward')
for arg in args
]
elif direction == 'updown':
exprs = [arg.fill_null('backward').fill_null('forward') for arg in args]
exprs = [
arg.fill_null(strategy = 'backward')
.fill_null(strategy = 'forward')
for arg in args
]
else:
raise ValueError("direction must be one of down, up, downup, or updown")

Expand Down Expand Up @@ -304,11 +312,13 @@ def filter(self, *args,
else:
out = super().filter(exprs)

return out
return out.pipe(from_polars)

def frame_equal(self, other, null_equal = True):
"""Check if two Tibbles are equal"""
return super().frame_equal(other, null_equal = null_equal)
df = self.to_polars()
other = other.to_polars()
return df.frame_equal(other, null_equal = null_equal)

def inner_join(self, df, left_on = None, right_on = None, on = None, suffix = '_right'):
"""
Expand All @@ -335,7 +345,7 @@ def inner_join(self, df, left_on = None, right_on = None, on = None, suffix = '_
"""
if (left_on == None) & (right_on == None) & (on == None):
on = list(set(self.names) & set(df.names))
return super().join(df, left_on, right_on, on, 'inner', suffix)
return super().join(df, left_on, right_on, on, 'inner', suffix).pipe(from_polars)

def left_join(self, df, left_on = None, right_on = None, on = None, suffix = '_right'):
"""
Expand All @@ -362,7 +372,7 @@ def left_join(self, df, left_on = None, right_on = None, on = None, suffix = '_r
"""
if (left_on == None) & (right_on == None) & (on == None):
on = list(set(self.names) & set(df.names))
return super().join(df, left_on, right_on, on, 'left', suffix)
return super().join(df, left_on, right_on, on, 'left', suffix).pipe(from_polars)

def mutate(self, *args,
by = None,
Expand Down Expand Up @@ -455,7 +465,7 @@ def full_join(self, df, left_on = None, right_on = None, on = None, suffix: str
"""
if (left_on == None) & (right_on == None) & (on == None):
on = list(set(self.names) & set(df.names))
return super().join(df, left_on, right_on, on, 'outer', suffix)
return super().join(df, left_on, right_on, on, 'outer', suffix).pipe(from_polars)

def pivot_longer(self,
cols = everything(),
Expand Down Expand Up @@ -483,7 +493,7 @@ def pivot_longer(self,
value_vars = pl.Series(self.select(cols).names)
id_vars = df_cols[~df_cols.is_in(value_vars)]
out = super().melt(id_vars, value_vars, names_to, values_to)
return out
return out.pipe(from_polars)

def pivot_wider(self,
names_from = 'name',
Expand Down Expand Up @@ -527,7 +537,10 @@ def pivot_wider(self,
id_cols = '_id'
self = self.mutate(_id = pl.lit(1))

out = super().pivot(values_from, id_cols, names_from, values_fn)
out = (super()
.pivot(values_from, id_cols, names_from, values_fn)
.pipe(from_polars)
)

if values_fill != None:
new_cols = pl.Series(out.names)
Expand Down Expand Up @@ -629,7 +642,7 @@ def rename(self, *args, **kwargs):
mapping = {key:value for key, value in zip(old_names, new_names)}
else:
mapping = {value:key for key, value in kwargs.items()}
return super().rename(mapping)
return super().rename(mapping).pipe(from_polars)

def replace_null(self, replace = None):
"""
Expand Down Expand Up @@ -724,7 +737,7 @@ def select(self, *args):
"""
args = _as_list(args)
args = _col_exprs(args)
return super().select(args)
return super().select(args).pipe(from_polars)

def slice(self, *args, by = None):
"""
Expand All @@ -748,7 +761,7 @@ def slice(self, *args, by = None):
df = super(Tibble, self).groupby(by).apply(lambda x: x.select(pl.all().take(rows)))
else:
df = super(Tibble, self).select(pl.all().take(rows))
return df
return df.pipe(from_polars)

def slice_head(self, n = 5, *, by = None):
"""
Expand All @@ -772,7 +785,8 @@ def slice_head(self, n = 5, *, by = None):
df = super(Tibble, self).groupby(by).head(n)
else:
df = super(Tibble, self).head(n)
return df.select(col_order)
df = df.select(col_order)
return df.pipe(from_polars)

def slice_tail(self, n = 5, *, by = None):
"""
Expand All @@ -796,7 +810,8 @@ def slice_tail(self, n = 5, *, by = None):
df = super(Tibble, self).groupby(by).tail(n)
else:
df = super(Tibble, self).tail(n)
return df.select(col_order)
df = df.select(col_order)
return df.pipe(from_polars)

def summarise(self, *args,
by = None,
Expand Down Expand Up @@ -829,13 +844,11 @@ def summarize(self, *args,
... max_b = tp.max(col('b')))
"""
exprs = _as_list(args) + _kwargs_as_exprs(kwargs)

if _uses_by(by):
out = super(Tibble, self).groupby(by).agg(exprs)
else:
out = super(Tibble, self).select(exprs)

return out
return out.pipe(from_polars)

def tail(self, n = 5, *, by = None):
"""Alias for `.slice_tail()`"""
Expand Down

0 comments on commit 0218f8c

Please sign in to comment.