Вы не использовали tr
в своем заголовке, если вы используете тот же лог c, что и для вашего тела, он будет выглядеть так
$('#geo_summary thead').append(
$('<tr>').append(Object.keys(geodata[0]).map(x => $('<td>').text(x)))
);
$('#geo_summary tbody').append(
geodata.map(row => $('<tr>').append(
Object.values(row).map(x => $('<td>').text(x))
))
);
Тогда он должен сгенерироваться правильно