count requires O(N) and at(offset) - the most frequent type of index - does hashmap lookups.
consider an O(N) for loop becomes O(N^2) and the performance of this sort of loop could have.... The random places in practice one needs the shape of a dataframe are high and shouldn't incur computation or heavy operations.
function visitEveryRow( visitor )
for(let i = 0; i < df.count(); ++i){
visitor(df.iloc[i])
}