It looks like the features that might be surprising boil down to:

* ``""`` and ``None`` are treated equivalently as signals of missing data
* strings are converted to other types like int/float/bool/date/datetime if what they contain has specific forms
* string/option[string] are the most general type, incompatible types like int and date together are treated as strings