It's possible to specify the column order explicitly via `_init_from_dict`.  Something like the following should work:

Instead of `names = set()` use `names_from_data = set()`.  Then:
```
if names is None:
    names = sorted(names_from_data)
```
That does two things.  First it defers to the user-supplied `names`, which then must provide an ordered list of all the desired columns.  Second, if the user didn't supply `names` then it uses the sorted names from the data.  I think sorting is good because then it provides the output in a predictable order.