Изменить форму pandas df из x, y, z в столбцах до значений индекса x, заголовка y и z - PullRequest
0 голосов
/ 29 мая 2020

У меня есть pandas df с x (широта), y (долгота) и z (топография / высота).

Я хочу построить трехмерный график поверхности, но для этого мне нужен 2D-массив z, тогда как у меня есть 1D-массив (1 столбец).

Есть ли способ повернуть фрейм данных так, чтобы широты были индексом, долготы были заголовком, а z - значениями в таблице?

Я пробовал:

newdf = df.pivot(index='Pt_Latitude', columns='Pt_Longitude', values='topography')

, но это дает мне ошибку индекса:

Pt_Longitude  Pt_Latitude  topography    Coordinated_Universal_Time  S
0    272.799970   -45.261200     2670.92  2009-07-20T12:12:00.90412170  1
1    272.800520   -45.261986     2677.35  2009-07-20T12:12:00.90412170  2
2    272.798841   -45.261578     2670.04  2009-07-20T12:12:00.90412170  3
3    272.799396   -45.260423     2663.68  2009-07-20T12:12:00.90412170  4
4    272.801063   -45.260832     2671.67  2009-07-20T12:12:00.90412170  5
Traceback (most recent call last):
  File "catalan.py", line 28, in <module>
    newdf = df.pivot(index='Pt_Latitude', columns='Pt_Longitude', values='topography')
  File "C:\Users\polyq\Anaconda3\lib\site-packages\pandas\core\frame.py", line 5923, in pivot
    return pivot(self, index=index, columns=columns, values=values)
  File "C:\Users\polyq\Anaconda3\lib\site-packages\pandas\core\reshape\pivot.py", line 450, in pivot
    return indexed.unstack(columns)
  File "C:\Users\polyq\Anaconda3\lib\site-packages\pandas\core\series.py", line 3550, in unstack
    return unstack(self, level, fill_value)
  File "C:\Users\polyq\Anaconda3\lib\site-packages\pandas\core\reshape\reshape.py", line 419, in unstack
    constructor=obj._constructor_expanddim,
  File "C:\Users\polyq\Anaconda3\lib\site-packages\pandas\core\reshape\reshape.py", line 141, in __init__
    self._make_selectors()
  File "C:\Users\polyq\Anaconda3\lib\site-packages\pandas\core\reshape\reshape.py", line 176, in _make_selectors
    mask.put(selector, True)
IndexError: index 571859901 is out of bounds for axis 0 with size 571829246

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

Я думаю, что вы используете неправильный инструмент. Строка отлично работает с крошечным фреймом данных, подобным показанному в примере, но создает фрейм данных размером len (df) * len (df)! Это означает, что вас, скорее всего, укусит ошибка памяти.

Вкратце: я не вижу способа повернуть большой фрейм данных в соответствии с вашими требованиями, потому что он исчерпает доступную память.

0 голосов
/ 29 мая 2020

Почему не просто ...plt.plot_surface(*list(df.values), ...)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...