Double storage of values in table-field
The data is not stored twice in the database. I suspect that craft adds the additional array items when prepping the data, so that they can be referenced by either column number or column title.

But with a little finesse, you might be able to do something like the following, using key, value in the for loop and twig's slice filter:

&lt;table&gt;
    {% for row in entry.myTableFieldHandle %}
        &lt;tr&gt;
            {% for key, data in row if key|slice(0,3) == 'col' %}
                &lt;td&gt;{{ data }}&lt;/td&gt;
            {% endfor %}
        &lt;/tr&gt;
    {% endfor %}
&lt;/table&gt;