Pandas column access w/column names containing spaces

dataframe, pandas, python, string

Solution

I think the default way is to use the bracket method instead of the dot notation.

import pandas as pd

df1 = pd.DataFrame({
    'key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'],
    'dat a1': range(7)
})

df1['dat a1']

The other methods, like exposing it as an attribute are more for convenience.

Problem

If I import or create a pandas column that contains no spaces, I can access it as such: ``` from pandas import DataFrame df1 = DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'], 'data1': range(7)}) df1.data1 ``` which would return that series for me. If, however, that column has a space in its name, it isn't accessible via that method: ``` from pandas import DataFrame df2 = DataFrame({'key': ['a','b','d'], 'data 2': range(3)}) df2.data 2 # <--- not the droid I'm looking for. ``` I know I can access it using .xs(): ``` df2.xs('data 2', axis=1) ``` There's got to be another way. I've googled it like mad and can't think of any other way to google it. I've read all 96 entries here on SO that contain "column" and "string" and "pandas" and could find no previous answer. Is this the only way, or is there something better?

Original source