Un poco enrevesado, pero parece que funciona:
import geopandas as gpd
import pandas as pd
import psycopg2
con = psycopg2.connect(database="somedbname", user="someuser", password="somepassword",
host="somehost")
sql = "SELECT x, y, val, geom FROM (SELECT dp.* FROM somerastername, LATERAL ST_PixelAsCentroids(rast, 1) AS dp) foo"
df = gpd.GeoDataFrame.from_postgis(sql, con, geom_col='geom' ) #Create geodataframe
df2 = pd.pivot_table(df, values='val', index='x', columns='y') #Pivot
La consulta sql debería crear una tabla con el aspecto de la captura de pantalla siguiente:
A continuación, hago pivotar utilizando pandas a esto:
df2.head(5)
Out[17]:
y 1 2 3 ... 1998 1999 2000
x ...
1 290.527374 291.153809 292.508698 ... 290.498169 294.330933 297.080139
2 290.632050 290.655670 290.633057 ... 293.128540 296.367706 297.665710
3 294.361938 291.505859 291.971100 ... 293.437775 295.462372 297.046967
4 295.409454 294.503357 293.324707 ... 292.185974 293.646912 294.779114
5 296.388123 296.558533 294.026611 ... 289.595337 291.347290 291.802368
[5 rows x 2000 columns]