Python Pandas dataFrame - Columns selection
No difference
pd.crosstab(train_df['ColA'], train_df['ColB']) is recommended to prevent possible errors. 
For example, if you have a column named count and if you type train_df.count it will give an error. train_df['count'] won't give an error.
I have a Pandas dataFrame object train_df with say a column called "ColA" and a column "ColB". It has been loaded from a csv file with columns header using read_csv
I obtain the same results when I code:
pd.crosstab(train_df['ColA'], train_df['ColB'])
or 
pd.crosstab(train_df.ColA, train_df.ColB)
Is there any difference in these 2 ways of selecting columns? 
When I request to print the type it's the same : pandas.core.series.Series