Dataframe method fails with `return in facets`
lambdamusic opened this issue · comments
%%dsldf
search publications
return in "facets" funders
return in "facets" research_orgs
leads to
---------------------------------------------------------------------------
AssertionError Traceback (most recent call last)
~/Envs/jupyterlab/lib/python3.8/site-packages/pandas/core/internals/construction.py in _list_to_arrays(data, columns, coerce_float, dtype)
495 try:
--> 496 result = _convert_object_array(
497 content, columns, dtype=dtype, coerce_float=coerce_float
~/Envs/jupyterlab/lib/python3.8/site-packages/pandas/core/internals/construction.py in _convert_object_array(content, columns, coerce_float, dtype)
579 # caller's responsibility to check for this...
--> 580 raise AssertionError(
581 f"{len(columns)} columns passed, passed data had "
AssertionError: 1 columns passed, passed data had 20 columns
The above exception was the direct cause of the following exception:
ValueError Traceback (most recent call last)
<ipython-input-69-c85bc5dbe030> in <module>
----> 1 get_ipython().run_cell_magic('dsldf', '', 'search publications \nreturn in "facets" funders \nreturn in "facets" research_orgs\n')
~/Envs/jupyterlab/lib/python3.8/site-packages/IPython/core/interactiveshell.py in run_cell_magic(self, magic_name, line, cell)
2369 with self.builtin_trap:
2370 args = (magic_arg_s, cell)
-> 2371 result = fn(*args, **kwargs)
2372 return result
2373
<decorator-gen-127> in dsldf(self, line, cell)
~/Envs/jupyterlab/lib/python3.8/site-packages/IPython/core/magic.py in <lambda>(f, *a, **k)
185 # but it's overkill for just that one bit of state.
186 def magic_deco(arg):
--> 187 call = lambda f, *a, **k: f(*a, **k)
188
189 if callable(arg):
~/Envs/jupyterlab/lib/python3.8/site-packages/dimcli/jupyter/magics.py in dsldf(self, line, cell)
69 print("Sorry - DSL to dataframe magic methods work only with `search` queries.")
70 return None
---> 71 data = self._handle_query(line).as_dataframe()
72 self.shell.user_ns[self.results_var] = data
73 return data
~/Envs/jupyterlab/lib/python3.8/site-packages/dimcli/core/api.py in as_dataframe(self, key)
711
712 if not self.json.get("errors"):
--> 713 return self.df_factory.df_simple(self.json, key)
714
715
~/Envs/jupyterlab/lib/python3.8/site-packages/dimcli/core/dataframe_factory.py in df_simple(self, data, key)
46 output = pd.DataFrame.from_dict(data[valid_key])
47 elif type(data[valid_key]) == dict: # top level dict, use keys as index
---> 48 output = pd.DataFrame.from_dict(data[valid_key], orient="index", columns=[valid_key])
49 else: # no list, then make one and try to return everything
50 output = pd.DataFrame.from_dict([data])
~/Envs/jupyterlab/lib/python3.8/site-packages/pandas/core/frame.py in from_dict(cls, data, orient, dtype, columns)
1245 raise ValueError("only recognize index or columns for orient")
1246
-> 1247 return cls(data, index=index, columns=columns, dtype=dtype)
1248
1249 def to_numpy(self, dtype=None, copy=False) -> np.ndarray:
~/Envs/jupyterlab/lib/python3.8/site-packages/pandas/core/frame.py in __init__(self, data, index, columns, dtype, copy)
472 if is_named_tuple(data[0]) and columns is None:
473 columns = data[0]._fields
--> 474 arrays, columns = to_arrays(data, columns, dtype=dtype)
475 columns = ensure_index(columns)
476
~/Envs/jupyterlab/lib/python3.8/site-packages/pandas/core/internals/construction.py in to_arrays(data, columns, coerce_float, dtype)
459 return [], [] # columns if columns is not None else []
460 if isinstance(data[0], (list, tuple)):
--> 461 return _list_to_arrays(data, columns, coerce_float=coerce_float, dtype=dtype)
462 elif isinstance(data[0], abc.Mapping):
463 return _list_of_dict_to_arrays(
~/Envs/jupyterlab/lib/python3.8/site-packages/pandas/core/internals/construction.py in _list_to_arrays(data, columns, coerce_float, dtype)
498 )
499 except AssertionError as e:
--> 500 raise ValueError(e) from e
501 return result
502
ValueError: 1 columns passed, passed data had 20 columns