Преобразовать GeoSeries в обычный плавающий тип?

Я пытаюсь преобразовать столбец объекта GeoDataFrame, содержащий numpy типов данных float64, в массив обычных типов данных с плавающей запятой. Мне интересно, есть ли способ сделать это без повторения всего столбца?

trajectory_features['points'][fid] = gdf[key]

Это то, что у меня слишком далеко, но когда я пытаюсь сериализовать его в JSON, он выдает ошибку, что тип данных numpy float64 не является сериализуемым JSON. gdf - это GeoDataFrame, а trajectory_features - это двумерный словарь.


person Jordan Rose    schedule 31.05.2018    source источник
comment
Кстати, если вы конвертируете его в Geo JSON (а не в какой-то пользовательский формат json), вы можете использовать встроенный метод to_json   -  person joris    schedule 01.06.2018
comment
к сожалению, он конвертируется в пользовательский формат JSON, поэтому я не могу использовать to_json в этом случае @joris   -  person Jordan Rose    schedule 01.06.2018


Ответы (3)


Вы можете использовать метод tolist, который преобразует массив или серию в список python, а сами значения затем также преобразуются в обычные числа с плавающей запятой python:

trajectory_features['points'][fid] = gdf[key].tolist()

См. Документы ndarray.tolist() (метод pandas.Series.tolist() использованный выше эквивалентен ему)

person joris    schedule 31.05.2018

Используйте numpy.ndarray.tolist(trajectory_features), чтобы преобразовать массив numpy в обычный список, содержащий ваши числа с плавающей запятой.

person Blackscholes    schedule 31.05.2018

Благодаря ответу @ Psy я смог решить проблему.

Мой код:

trajectory_features['points'][fid] = numpy.ndarray.tolist(gdf[key].values)
person Jordan Rose    schedule 31.05.2018
comment
Немного короче и чище, вы также можете gdf[key].tolist() - person joris; 01.06.2018
comment
Кажется, тоже работает, и мне больше нравится ваш ответ, так как его легче понять. Обидно, что я сам не придумал что-то настолько простое. Если вы хотите опубликовать это как ответ, я приму это как решение. @joris - person Jordan Rose; 01.06.2018