Nope, you're not required to assign column names, nor do you need them to access any element.
In [12]: df = pd.DataFrame([0])
In [13]: df.ix[0,0]
Out[13]: 0
In [14]: df[0][0]
Out[14]: 0
In fact, you can think of the column already having a name -- it is the integer 0. Look at what happens when you provide a name
In [15]: df #Before naming the column
Out[15]:
0
0 0
In [16]: df.columns = ['ColA']
In [17]: df #Renamed
Out[17]:
ColA
0 0
In [18]: df['ColA'][0] #Now you can access the column using the new name
Out[18]: 0
In [19]: df[0][0] #... but trying the old name will not work
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
KeyError: 'no item named 0'
You can still use DataFrame.ix just as before, though:
In [20]: df.ix[0,0]
Out[20]: 0