Consistency between indexing by labels and "exporting" data
I think this falls under the Zen of Python, "explicit is better than implicit".

Documentation says "In pandas, our general viewpoint is that labels matter more than integer locations".  But I've been caught a few times when trying to carry over this viewpoint to things that access a DataFrame via .as_matrix().  as_matrix returns the data but without the index labels, which requires that the integer locations be taken into account if you want to relate future results based on that matrix form back to the original DataFrame.  The all-important index labels are treated implicitly by as_matrix.

The "as_" prefix suggests to me that I should get a complete view of my data, just in a different format.  Since labels matter more than locations, it feels out of place for labels to be left out.  This makes it easy for beginners to forget about the labels and accidentally try to apply location-based slices via .ix[] based on location indices calculated from the matrix form.  This is quite easy to do if you never cared about your index labels in the first place.  Since the index is created by default if not specified, DataFrames act just like they are location sliced until you remove a row or shuffle things around.  

It might be worth changing as_matrix to return the index labels somehow (with a flag perhaps to not do so).  either as a tuple (df.index ,data) or by pretending that the indices are the first column.  This way, users would be required to consider the index labels as an important aspect of their data.  It isn't just something Pandas does when printing out rows of the DataFrame, but an actual part of your data.
