@lgautier just like `numpy` won't automatically roll out generators for you, `pandas` can't really take a generator either. The reason for this in numpy-land that you need to know the size of the object ahead of time to efficiently allocate space for it. There's no standard, widely-used way for a generator to express this information. If you pass a generator to pandas, it treats it just like numpy does, which is to say just considers it a Python object.

pandas uses hard type checking in many places to make APIs more expressive/easier to use (e.g., lists are treated as special when passed to `__getitem__`, so that `df[["A", "B", "C"]]` and `df[("A", "B", C"")]` both work the way you want). For input data, it is definitely reasonable to change the checks to use `collections` instead to make it more expressive.  That said, using `collections` isn't compatible with using the `array` module in 2.7, e.g. the following:

```python
import collections, array
arr = array.array('i', [1, 2, 3])
print isinstance(arr, collections.Sequence) # False
```

So maybe need a function that special cases `array.array`, checks for `collections.Sequence` and `collections.Mapping` and does what you expect from there.