wesm/pandas — Issue #486: exception joining dataframes with different datatypes
Author: CRP
Created: 2011-12-14 09:48:57+00:00
State: open

In [71]: a=DataFrame(randn(10,2),columns=['a','b'])

In [72]: b=DataFrame(randn(10,1),columns=['c']).astype(np.float32)

In [73]: a.join(b)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/Users/c.prinoth/ in ()
----> 1 a.join(b)

/usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/pandas/core/frame.pyc in join(self, other, on, how, lsuffix, rsuffix)
2614 return self._join_on(other, on, how, lsuffix, rsuffix)
2615 else:
-> 2616 return self._join_index(other, how, lsuffix, rsuffix)
2617
2618 def _join_on(self, other, on, how, lsuffix, rsuffix):

/usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/pandas/core/frame.pyc in _join_index(self, other, how, lsuffix, rsuffix)
2649
2650 # this will always ensure copied data

-> 2651 merged_data = join_managers(thisdata, otherdata, axis=1, how=how)
2652 return self._constructor(merged_data)
2653

/usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/pandas/core/internals.pyc in join_managers(left, right, axis, how, copy)
1032 def join_managers(left, right, axis=1, how='left', copy=True):
1033 op = _JoinOperation(left, right, axis=axis, how=how)
-> 1034 return op.get_result(copy=copy)
1035
1036 class _JoinOperation(object):

/usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/pandas/core/internals.pyc in get_result(self, copy)
1090 if lblk and rblk:
1091 # true merge, do not produce intermediate copy

-> 1092 res_blk = self._merge_blocks(lblk, rblk)
1093 elif lblk:
1094 res_blk = self._reindex_block(lblk, side='left')

/usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/pandas/core/internals.pyc in _merge_blocks(self, lblk, rblk)
1206 else:
1207 common.take_fast(rblk.values, ridx, None, False,
-> 1208 axis=self.axis, out=out[lk:])
1209
1210 # does not sort

/usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/pandas/core/common.pyc in take_fast(arr, indexer, mask, needs_masking, axis, out)
247 return take_2d(arr, indexer, out=out, mask=mask,
248 needs_masking=needs_masking,
--> 249 axis=axis)
250
251 result = arr.take(indexer, axis=axis, out=out)

/usr/local/Cellar/python/2.7.2/lib/python2.7/site-packages/pandas/core/common.pyc in take_2d(arr, indexer, out, mask, needs_masking, axis)
232 needs_masking = mask.any()
233
--> 234 result = arr.take(indexer, axis=axis, out=out)
235 result = _maybe_mask(result, mask, needs_masking, axis=axis,
236 out_passed=out is not None)

TypeError: array cannot be safely cast to required type

In [77]: a.dtypes
Out[77]:
a float64
b float64

In [78]: b.dtypes
Out[78]: c float32