REF: sql insert_data operate column-wise to avoid internals
> I don't think we should be using internal functions except in the internals. This is not internal by any stretch (would say that pandas.io is offlimits entirely)

Can you please explain a bit more *why* you don't want a method like `DataFrame._iter_column_arrays` to be used outside of `frame.py` ?

Yes, we want to use as much public functions in the other pandas modules. But we do have a set of "private" methods that we use ourselves, that I would see as "internal developer APIs". For example, we also use `Series._values`, `Series._can_hold_na`, `Index._get_level_values` (this are a few examples currently being used in sql.py), and many others, outside core/series.py or core/indexes/. 
Or do you find that those should also not be used? 

Or, do you want to limit the use here because it is outside pandas/core? (initially, you commented you didn't want private DataFrame methods to be used outside of frame.py, but maybe you meant outside pandas/core, and within all of /core it is fine to use those? In which case the argument would only be about pandas.io, pandas.plotting, pandas.tseries, more or less) 
Just trying to understand your argument. > Can you please explain a bit more why you don't want a method like DataFrame._iter_column_arrays to be used outside of frame.py ?

Can we please bike-shed this elsewhere?