Is there a way to purge old data in a table? I have some tables in a matrix field and when I created the columns, originally I named them Col 1, Col 2, etc. That made sense to me but later I decided that since the client will be entering data, it'd make more sense to name them Column 1, Column 2, etc. 

I renamed them but that was after I'd entered a bunch of content. So now in the Craft admin, I only see the new names, but when I loop through the entries in the table rows, all of the old entries are there as well. 

Is there a way to purge that old data? I want to give the client to enter in the number of a column so you can add a highlight class to it. Right now, as I loop through the entries in those rows, it hits both old and new content and you can't get a dependable count.
Your interpretation of why you're getting duplicate columns when looping your  your table field is wrong.

Each column is always accessible via a automatically generated column handle (col1, col2, etc.), so that's not old and left over column names you're seeing there.

If you define custom handles in the Table field's settings, the cells' data will  be available via those properties as well, so you can then access the value via both row.price and row.col1. This feature is designed with direct access of columns / cells in mind, but gets in the way when looping through a row's cells. 

But Craft doesn't force you to define custom handles, so you can simply remove them in your field's settings and your "old data" will be removed.