text: Title: [BUG-REPORT] to_pandas_df giving error Urgent!!!
  Body: @JovanVeljanoski @maartenbreddels Hey There Can you please help me in this, its little Urgent
  
  I'm trying to do the conversion of vaex dataframe to pandas dataframe but its giving me error shared down below. At first I've taken two dataframes and joined them on more than column with merging solution and after that I've tried converting it to pandas data frame.
  
  Both the dataframes have these columns and datatypes:
  one data frame is named as df and another is named as product
  first image is of df dataframe:
  ![image](https://user-images.githubusercontent.com/17443937/157857013-7982245e-c582-4aea-ac83-086dd81ab341.png)
  second image is for product dataframe
  ![image](https://user-images.githubusercontent.com/17443937/157857148-e4f3d78b-0218-4f42-b3b8-35b9abe1321c.png)
  
  These two tables are joined using below code:
  ![image](https://user-images.githubusercontent.com/17443937/157857381-a0da363d-3672-4a80-8f56-a910496caf86.png)
  
  After this we get dataframe Named megedStuff which gives us the joins. Also many time I saw vaex is not good at handling empty table cells or nan values or missing values.
  
  When I try to convert this mergedStuff to pandas df it shows below error and also I'm attaching data with this. Maybe after converting it to csvs it will work fine but I'm not sure.
  
  [product.csv](https://github.com/vaexio/vaex/files/8231496/product.csv)
  [df.csv](https://github.com/vaexio/vaex/files/8231497/df.csv)
  
  
          ArrowIndexErrorTraceback (most recent call last)
          <ipython-input-11-968fb59ca07f> in <module>
          ----> 1 mergedStuff1 = mergedStuff.to_pandas_df()
          
          /opt/conda/lib/python3.7/site-packages/vaex/dataframe.py in to_pandas_df(self, column_names, selection, strings, virtual, index_name, parallel, chunk_size, array_type)
             3242             return iterator()
             3243         else:
          -> 3244             return create_pdf(self.to_dict(column_names=column_names, selection=selection, parallel=parallel, array_type=array_type))
             3245 
             3246     @docsubst
          
          /opt/conda/lib/python3.7/site-packages/vaex/dataframe.py in to_dict(self, column_names, selection, strings, virtual, parallel, chunk_size, array_type)
             3157                     yield i1, i2, dict(list(zip(column_names, [array_types.convert(chunk, array_type) for chunk in chunks])))
             3158             return iterator()
          -> 3159         return dict(list(zip(column_names, [array_types.convert(chunk, array_type) for chunk in self.evaluate(column_names, selection=selection, parallel=parallel)])))
             3160 
             3161     @_hidden
          
          /opt/conda/lib/python3.7/site-packages/vaex/dataframe.py in evaluate(self, expression, i1, i2, out, selection, filtered, array_type, parallel, chunk_size, progress)
             2996             return self.evaluate_iterator(expression, s1=i1, s2=i2, out=out, selection=selection, filtered=filtered, array_type=array_type, parallel=parallel, chunk_size=chunk_size, progress=progress)
             2997         else:
          -> 2998             return self._evaluate_implementation(expression, i1=i1, i2=i2, out=out, selection=selection, filtered=filtered, array_type=array_type, parallel=parallel, chunk_size=chunk_size, progress=progress)
             2999 
             3000     @docsubst
          
          /opt/conda/lib/python3.7/site-packages/vaex/dataframe.py in _evaluate_implementation(self, expression, i1, i2, out, selection, filtered, array_type, parallel, chunk_size, raw, progress)
             6351                         arrays[expression][i1:i2] = blocks[i]
             6352             if expression_to_evaluate:
          -> 6353                 df.map_reduce(assign, lambda *_: None, expression_to_evaluate, progress=progress, ignore_filter=False, selection=selection, pre_filter=use_filter, info=True, to_numpy=False, name="evaluate")
             6354             def finalize_result(expression):
             6355                 expression_obj = expression
          
          /opt/conda/lib/python3.7/site-packages/vaex/dataframe.py in map_reduce(self, map, reduce, arguments, progress, delay, info, to_numpy, ignore_filter, pre_filter, name, selection)
              427         progressbar.add_task(task, f'map reduce: {name}')
              428         task = self.executor.schedule(task)
          --> 429         return self._delay(delay, task)
              430 
              431     def apply(self, f, arguments=None, vectorize=False, multiprocessing=True):
          
          /opt/conda/lib/python3.7/site-packages/vaex/dataframe.py in _delay(self, delay, task, progressbar)
             1686             return task
             1687         else:
          -> 1688             self.execute()
             1689             return task.get()
             1690 
          
          /opt/conda/lib/python3.7/site-packages/vaex/dataframe.py in execute(self)
              410                 print(repr(task))
              411         if self.executor.tasks:
          --> 412             self.executor.execute()
              413 
              414     async def execute_async(self):
          
          /opt/conda/lib/python3.7/site-packages/vaex/execution.py in execute(self)
              306 
              307     def execute(self):
          --> 308         for _ in self.execute_generator():
              309             pass  # just eat all elements
              310 
          
          /opt/conda/lib/python3.7/site-packages/vaex/execution.py in execute_generator(self, use_async)
              433                                                     dataset.row_count,
              434                                                     progress=progress,
          --> 435                                                     cancel=lambda: self._cancel(run), unpack=True, run=run, use_async=use_async)
              436                 duration_wallclock = time.time() - t0
              437                 logger.debug("executing took %r seconds", duration_wallclock)
          
          /opt/conda/lib/python3.7/site-packages/vaex/multithreading.py in map(self, callable, iterator, count, on_error, progress, cancel, unpack, use_async, **kwargs_extra)
              104                 iterator = (loop.run_in_executor(self, lambda value=value: wrapped(value)) for value in cancellable_iter())
              105             else:
          --> 106                 iterator = super(ThreadPoolIndex, self).map(wrapped, cancellable_iter())
              107         total = 0
              108         iterator = iter(buffer(iterator, self._max_workers + 3))
          
          /opt/conda/lib/python3.7/concurrent/futures/_base.py in map(self, fn, timeout, chunksize, *iterables)
              573             end_time = timeout + time.monotonic()
              574 
          --> 575         fs = [self.submit(fn, *args) for args in zip(*iterables)]
              576 
              577         # Yield must be hidden in closure so that the futures are submitted
          
          /opt/conda/lib/python3.7/concurrent/futures/_base.py in <listcomp>(.0)
              573             end_time = timeout + time.monotonic()
              574 
          --> 575         fs = [self.submit(fn, *args) for args in zip(*iterables)]
              576 
              577         # Yield must be hidden in closure so that the futures are submitted
          
          /opt/conda/lib/python3.7/site-packages/vaex/multithreading.py in cancellable_iter()
               90         chunk_iterator = iterator
               91         def cancellable_iter():
          ---> 92             for value in chunk_iterator:
               93                 yield value
               94                 if cancelled:
          
          /opt/conda/lib/python3.7/site-packages/vaex/dataset.py in chunk_iterator(self, columns, chunk_size, reverse)
              647                 raise KeyError(f'Oops, you tried to get column {name}, but you renamed it to {rename}')
              648         columns = [self.reverse.get(name, name) for name in columns]
          --> 649         for i1, i2, chunks in self.original.chunk_iterator(columns, chunk_size, reverse=reverse):
              650             yield i1, i2, {self.renaming.get(name, name): ar for name, ar in chunks.items()}
              651 
          
          /opt/conda/lib/python3.7/site-packages/vaex/dataset.py in chunk_iterator(self, columns, chunk_size, reverse)
             1165             if column in self._dropped_names:
             1166                 raise KeyError(f'Oops, you tried to get column {column} while it is actually dropped')
          -> 1167         yield from self.original.chunk_iterator(columns, chunk_size=chunk_size, reverse=reverse)
             1168 
             1169     def hashed(self):
          
          /opt/conda/lib/python3.7/site-packages/vaex/join.py in chunk_iterator(self, *args, **kwargs)
               62 
               63     def chunk_iterator(self, *args, **kwargs):
          ---> 64         yield from self.original.chunk_iterator(*args, **kwargs)
               65 
               66     def hashed(self):
          
          /opt/conda/lib/python3.7/site-packages/vaex/dataset.py in chunk_iterator(self, columns, chunk_size, reverse)
             1235             for (i1, i2, ichunks), (j1, j2, jchunks) in zip(
             1236                 self.left.chunk_iterator(columns_left, chunk_size, reverse=reverse),
          -> 1237                 self.right.chunk_iterator(columns_right, chunk_size, reverse=reverse)):
             1238                 # TODO: if one of the datasets does not respect the chunk_size (e.g. parquet)
             1239                 # this might fail
          
          /opt/conda/lib/python3.7/site-packages/vaex/dataset.py in chunk_iterator(self, columns, chunk_size, reverse)
              908         # TODO: we may be able to do this slightly more efficient by first
              909         # materializing the columns
          --> 910         yield from self._default_chunk_iterator(self._columns, columns, chunk_size, reverse=reverse)
              911 
              912     def slice(self, start, end):
          
          /opt/conda/lib/python3.7/site-packages/vaex/dataset.py in _default_chunk_iterator(self, array_map, columns, chunk_size, reverse)
              506     def _default_chunk_iterator(self, array_map, columns, chunk_size, reverse=False):
              507         for i1, i2, reader in self._default_lazy_chunk_iterator(array_map, columns, chunk_size, reverse):
          --> 508             yield i1, i2, reader()
              509 
              510     @abstractmethod
          
          /opt/conda/lib/python3.7/site-packages/vaex/dataset.py in reader(i1, i2)
              497             i2 = min((i + 1) * chunk_size, self.row_count)
              498             def reader(i1=i1, i2=i2):
          --> 499                 chunks = {k: array_map[k][i1:i2] for k in columns}
              500                 length = i2 - i1
              501                 for name, chunk in chunks.items():
          
          /opt/conda/lib/python3.7/site-packages/vaex/dataset.py in <dictcomp>(.0)
              497             i2 = min((i + 1) * chunk_size, self.row_count)
              498             def reader(i1=i1, i2=i2):
          --> 499                 chunks = {k: array_map[k][i1:i2] for k in columns}
              500                 length = i2 - i1
              501                 for name, chunk in chunks.items():
          
          /opt/conda/lib/python3.7/site-packages/vaex/column.py in __getitem__(self, slice)
              375             take_indices[mask] = 0
              376         if isinstance(ar_unfiltered, supported_arrow_array_types):
          --> 377             ar = ar_unfiltered.take(vaex.array_types.to_arrow(take_indices))
              378         else:
              379             ar = ar_unfiltered[take_indices]
          
          /opt/conda/lib/python3.7/site-packages/pyarrow/array.pxi in pyarrow.lib.Array.take()
          
          /opt/conda/lib/python3.7/site-packages/pyarrow/compute.py in take(data, indices, boundscheck, memory_pool)
              452     """
              453     options = TakeOptions(boundscheck=boundscheck)
          --> 454     return call_function('take', [data, indices], options, memory_pool)
              455 
              456 
          
          /opt/conda/lib/python3.7/site-packages/pyarrow/_compute.pyx in pyarrow._compute.call_function()
          
          /opt/conda/lib/python3.7/site-packages/pyarrow/_compute.pyx in pyarrow._compute.Function.call()
          
          /opt/conda/lib/python3.7/site-packages/pyarrow/error.pxi in pyarrow.lib.pyarrow_internal_check_status()
          
          /opt/conda/lib/python3.7/site-packages/pyarrow/error.pxi in pyarrow.lib.check_status()
          
          ArrowIndexError: Index 21245 out of bounds