...
You can find notes on reading 2DA files in scripts at the Lexicon page for Get2DAString. Main thing to note is on error (no column or row matching etc.) and on blank entries it returns an empty string.
Missing Columns versus Blank Columns (****)
There is different behaviour for certain columns where the column is missing entirely (eg; using a old 1.69 version of a 2da) versus the column being present but blanked (****). A notable example is the additional columns in racialtypes.2da which defaults to the 1.69 implementations if the columns are not present to maintain comatibility, and where **** can actually be counted as "Empty value" instead of "Missing value" meaning different behaviour.
Order of Columns
The game generally won't care what order columns are in except for two exceptions;
...