Как уже сказали другие комментаторы, чаще всё-таки нужно производить операции над строками (добавление, удаление, выборка по фильтру).
Если вы ожидаете, что вам этого не нужно будет, зато нужны будут операции со столбцами, вы можете использовать тот подход, который вам кажется более удачным именно для вашего случая.
Но, имхо, самым лучшим будет просто написать свой класс, который будет предоставлять удобные интерфейсы для работы как со строками, так и со столбцами.
Например, можно сделать так, чтобы в этом классе table.rows[0] отображало первую строчку, а table.cols[0] - первый столбец. Плюс, дополнительно прикрутить выборку по строкам и колонкам.
Например, вот так table.select_cols(1,5)
Тут уже всё зависит от вашей фантазии, вы можете реализовать столько удобных интерфейсов, сколько сможете вообразить. И для вас (или другого пользователя этого класса) вообще не будет никакой разницы, как там организованна внутренняя структура данных, потому что работать вы будете только с удобными интерфейсами, которые вы напишете именно под ваши задачи.