diff --git a/pandas/core/computation/eval.py b/pandas/core/computation/eval.py index 196f4b2679576..f44fa347cb053 100644 --- a/pandas/core/computation/eval.py +++ b/pandas/core/computation/eval.py @@ -3,6 +3,7 @@ """Top level ``eval`` module. """ +import warnings import tokenize from pandas.io.formats.printing import pprint_thing from pandas.core.computation.scope import _ensure_scope @@ -303,7 +304,8 @@ def eval(expr, parser='pandas', engine=None, truediv=True, "if there is no assignment") # assign if needed - if env.target is not None and parsed_expr.assigner is not None: + assigner = parsed_expr.assigner + if env.target is not None and assigner is not None: target_modified = True # if returning a copy, copy only on the first assignment @@ -317,22 +319,25 @@ def eval(expr, parser='pandas', engine=None, truediv=True, # TypeError is most commonly raised (e.g. int, list), but you # get IndexError if you try to do this assignment on np.ndarray. + # we will ignore numpy warnings here; e.g. if trying + # to use a non-numeric indexer try: - target[parsed_expr.assigner] = ret + with warnings.catch_warnings(record=True): + target[assigner] = ret except (TypeError, IndexError): raise ValueError("Cannot assign expression output to target") if not resolvers: - resolvers = ({parsed_expr.assigner: ret},) + resolvers = ({assigner: ret},) else: # existing resolver needs updated to handle # case of mutating existing column in copy for resolver in resolvers: - if parsed_expr.assigner in resolver: - resolver[parsed_expr.assigner] = ret + if assigner in resolver: + resolver[assigner] = ret break else: - resolvers += ({parsed_expr.assigner: ret},) + resolvers += ({assigner: ret},) ret = None first_expr = False diff --git a/pandas/core/groupby.py b/pandas/core/groupby.py index 8db75accc84e5..bf2b598d4ff9e 100644 --- a/pandas/core/groupby.py +++ b/pandas/core/groupby.py @@ -1913,7 +1913,10 @@ def size(self): """ ids, _, ngroup = self.group_info ids = _ensure_platform_int(ids) - out = np.bincount(ids[ids != -1], minlength=ngroup or None) + if ngroup: + out = np.bincount(ids[ids != -1], minlength=ngroup) + else: + out = ids return Series(out, index=self.result_index, dtype='int64') diff --git a/pandas/io/json/json.py b/pandas/io/json/json.py index be39f4baba0fb..32bab09a0c4ac 100644 --- a/pandas/io/json/json.py +++ b/pandas/io/json/json.py @@ -764,7 +764,7 @@ def _parse_numpy(self): if orient == "columns": args = loads(json, dtype=None, numpy=True, labelled=True, precise_float=self.precise_float) - if args: + if len(args): args = (args[0].T, args[2], args[1]) self.obj = DataFrame(*args) elif orient == "split": diff --git a/pandas/io/sas/sas7bdat.py b/pandas/io/sas/sas7bdat.py index 1d57093585ef2..26e39f0df8b29 100644 --- a/pandas/io/sas/sas7bdat.py +++ b/pandas/io/sas/sas7bdat.py @@ -596,6 +596,7 @@ def read(self, nrows=None): nrows = self.row_count if len(self.column_types) == 0: + self.close() raise EmptyDataError("No columns to parse from file") if self._current_row_in_file_index >= self.row_count: