@@ -426,6 +426,12 @@ def filter(self, *predicates: Expr) -> DataFrame:
426426 """
427427 df = self .df
428428 for p in predicates :
429+ if not isinstance (p , Expr ):
430+ msg = (
431+ f"Expected Expr, got { type (p ).__name__ } . "
432+ "Use col() or lit() to construct expressions."
433+ )
434+ raise TypeError (msg )
429435 df = df .filter (p .expr )
430436 return DataFrame (df )
431437
@@ -503,37 +509,44 @@ def with_column_renamed(self, old_name: str, new_name: str) -> DataFrame:
503509 return DataFrame (self .df .with_column_renamed (old_name , new_name ))
504510
505511 def aggregate (
506- self , group_by : list [Expr ] | Expr , aggs : list [Expr ] | Expr
512+ self ,
513+ group_by : list [Expr | str ] | Expr | str ,
514+ aggs : list [Expr ] | Expr ,
507515 ) -> DataFrame :
508516 """Aggregates the rows of the current DataFrame.
509517
510518 Args:
511- group_by: List of expressions to group by.
519+ group_by: List of expressions or column names to group by.
512520 aggs: List of expressions to aggregate.
513521
514522 Returns:
515523 DataFrame after aggregation.
516524 """
517- group_by = group_by if isinstance (group_by , list ) else [group_by ]
518- aggs = aggs if isinstance (aggs , list ) else [aggs ]
525+ group_by_list = group_by if isinstance (group_by , list ) else [group_by ]
526+ aggs_list = aggs if isinstance (aggs , list ) else [aggs ]
519527
520- group_by = [e .expr for e in group_by ]
521- aggs = [e .expr for e in aggs ]
522- return DataFrame (self .df .aggregate (group_by , aggs ))
528+ group_by_exprs = [
529+ Expr .column (e ).expr if isinstance (e , str ) else e .expr for e in group_by_list
530+ ]
531+ aggs_exprs = [e .expr for e in aggs_list ]
532+ return DataFrame (self .df .aggregate (group_by_exprs , aggs_exprs ))
523533
524- def sort (self , * exprs : Expr | SortExpr ) -> DataFrame :
525- """Sort the DataFrame by the specified sorting expressions.
534+ def sort (self , * exprs : Expr | SortExpr | str ) -> DataFrame :
535+ """Sort the DataFrame by the specified sorting expressions or column names .
526536
527537 Note that any expression can be turned into a sort expression by
528- calling its` ``sort`` method.
538+ calling its ``sort`` method.
529539
530540 Args:
531- exprs: Sort expressions, applied in order.
541+ exprs: Sort expressions or column names , applied in order.
532542
533543 Returns:
534544 DataFrame after sorting.
535545 """
536- exprs_raw = [sort_or_default (expr ) for expr in exprs ]
546+ exprs_raw = [
547+ sort_or_default (Expr .column (expr ) if isinstance (expr , str ) else expr )
548+ for expr in exprs
549+ ]
537550 return DataFrame (self .df .sort (* exprs_raw ))
538551
539552 def cast (self , mapping : dict [str , pa .DataType [Any ]]) -> DataFrame :
0 commit comments