BUG: error in concatting Series with numpy scalar / tuple names · Issue #21015 · pandas-dev/pandas (original) (raw)
In [2]: s1 = pd.Series({'a': 1.5}, name=np.int64(190))
In [3]: s2 = pd.Series([], name=(43, 0))
In [4]: pd.concat([s1, s2])
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-4-5f754290d56c> in <module>()
----> 1 pd.concat([s1, s2])
~/scipy/pandas/pandas/core/reshape/concat.py in concat(objs, axis, join, join_axes, ignore_index, keys, levels, names, verify_integrity, sort, copy)
224 verify_integrity=verify_integrity,
225 copy=copy, sort=sort)
--> 226 return op.get_result()
227
228
~/scipy/pandas/pandas/core/reshape/concat.py in get_result(self)
385 # stack blocks
386 if self.axis == 0:
--> 387 name = com._consensus_name_attr(self.objs)
388
389 mgr = self.objs[0]._data.concat([x._data for x in self.objs],
~/scipy/pandas/pandas/core/common.py in _consensus_name_attr(objs)
56 name = objs[0].name
57 for obj in objs[1:]:
---> 58 if obj.name != name:
59 return None
60 return name
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
It looks maybe a bit of a strange corner case, but you can get both cases rather easily (the one from selecting from Int64Index axis (not default RangeIndex), the other from MultiIndex axis), for example:
In [15]: df1 = pd.DataFrame([[1, 2], [3, 4]], columns=['a', 'b'], index=[0, 1])
In [16]: df2 = pd.DataFrame([[5, 6], [7, 8]], columns=['c', 'd'], index=pd.MultiIndex.from_tuples([(0, 0), (1, 1)]))
In [17]: pd.concat([df1.iloc[0], df2.iloc[0]])
...
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
The reason for the error is that if you compare a tuple and a numpy scalar, it gives an array as result:
In [18]: (0, 0) == np.int64(0)
Out[18]: array([ True, True], dtype=bool)