separate read method for DataFrame to cope with mixed order