首页 > 解决方案 > Python:ValueError:不能同时执行聚合和转换操作

问题描述

以下代码给出了错误:ValueError: cannot perform both aggregation and transformation operations simultaneously。关于违规行的任何一般想法以及解决方案是什么?我猜它与.agg线条有关,但不确定转换是什么或如何解决这个问题。这个for循环来自一个更大的函数,它有多个依赖项,所以很难排除故障。

作为参考,df是一个 Pandas DataFrame,partitions是一个列表。

aggregations = {}
partitions = finished_partitions
max_partitions = None

for i, partition in enumerate(partitions):
        if i % 100 == 1:
            print("Finished {} partitions...".format(i))
        if max_partitions is not None and i > max_partitions:
            break
        grouped_columns = df.loc[partition].agg(aggregations, squeeze=False)
        sensitive_counts = df.loc[partition].groupby(sensitive_column).agg({sensitive_column : 'count'})
        values = grouped_columns.iloc[0].to_dict()
        for sensitive_value, count in sensitive_counts[sensitive_column].items():
            if count == 0:
                continue
            values.update({
                sensitive_column : sensitive_value,
                'count' : count,

            })
            rows.append(values.copy())


---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-87-e447bbcf95ea> in <module>
      8         if max_partitions is not None and i > max_partitions:
      9             break
---> 10         grouped_columns = df.loc[partition].agg(aggregations, squeeze=False)
     11         sensitive_counts = df.loc[partition].groupby(sensitive_column).agg({sensitive_column : 'count'})
     12         values = grouped_columns.iloc[0].to_dict()

/emr/notebook-env/lib/python3.7/site-packages/pandas/core/frame.py in aggregate(self, func, axis, *args, **kwargs)
   7576         result = None
   7577         try:
-> 7578             result, how = self._aggregate(func, axis, *args, **kwargs)
   7579         except TypeError as err:
   7580             exc = TypeError(

/emr/notebook-env/lib/python3.7/site-packages/pandas/core/frame.py in _aggregate(self, arg, axis, *args, **kwargs)
   7607             result = result.T if result is not None else result
   7608             return result, how
-> 7609         return aggregate(self, arg, *args, **kwargs)
   7610 
   7611     agg = aggregate

/emr/notebook-env/lib/python3.7/site-packages/pandas/core/aggregation.py in aggregate(obj, arg, *args, **kwargs)
    580     elif is_dict_like(arg):
    581         arg = cast(AggFuncTypeDict, arg)
--> 582         return agg_dict_like(obj, arg, _axis), True
    583     elif is_list_like(arg):
    584         # we require a list, but not an 'str'

/emr/notebook-env/lib/python3.7/site-packages/pandas/core/aggregation.py in agg_dict_like(obj, arg, _axis)
    780         keys_to_use = keys_to_use if keys_to_use != [] else keys
    781         axis = 0 if isinstance(obj, ABCSeries) else 1
--> 782         result = concat({k: results[k] for k in keys_to_use}, axis=axis)
    783     elif any(is_ndframe):
    784         # There is a mix of NDFrames and scalars

/emr/notebook-env/lib/python3.7/site-packages/pandas/core/reshape/concat.py in concat(objs, axis, join, ignore_index, keys, levels, names, verify_integrity, sort, copy)
    293         verify_integrity=verify_integrity,
    294         copy=copy,
--> 295         sort=sort,
    296     )
    297 

/emr/notebook-env/lib/python3.7/site-packages/pandas/core/reshape/concat.py in __init__(self, objs, axis, join, keys, levels, names, ignore_index, verify_integrity, copy, sort)
    340 
    341         if len(objs) == 0:
--> 342             raise ValueError("No objects to concatenate")
    343 
    344         if keys is None:

ValueError: No objects to concatenate

标签: python

解决方案


推荐阅读