如何使用to_sql方法使用postgresql和pandas用点数据类型的列填充表?
我有一个有很多列的Excel。其中的两列是纬度和经度。我需要使用Pandas将数据从excel导入PostgreSQL中的表。PG中的表有一列而不是两列。这一列有名称坐标,其类型为点 例如,excel数据包含:如何使用to_sql方法使用postgresql和pandas用点数据类型的列填充表?,postgresql,pandas,Postgresql,Pandas,我有一个有很多列的Excel。其中的两列是纬度和经度。我需要使用Pandas将数据从excel导入PostgreSQL中的表。PG中的表有一列而不是两列。这一列有名称坐标,其类型为点 例如,excel数据包含: Name Longitude Latitude MEDELLÍN -75.5760017134 6.24858636743 ABEJORRAL -75.4287403904 5.78930111433 ABRIAQUÍ -76.0642948
Name Longitude Latitude
MEDELLÍN -75.5760017134 6.24858636743
ABEJORRAL -75.4287403904 5.78930111433
ABRIAQUÍ -76.0642948678 6.63228195504
ALEJANDRÍA -75.141334501 6.37606264274
我想使用Pandas作为PostgreSQL表导入数据:
Name Position
MEDELLÍN POINT(-75.5760017134,6.24858636743)
ABEJORRAL POINT(-75.4287403904,5.78930111433)
ABRIAQUÍ POINT(-76.0642948678,6.63228195504)
ALEJANDRÍA POINT(-75.141334501,6.37606264274)
如何“连接”两个源列(Lat和Lon)并使用sql方法将数据导入PostgreSQL?您必须安装
psycopg2、pandas、geopandas
库。首先,将csv文件导入到pandas
dataframe
import pandas as pd
from geopandas import GeoDataFrame
from shapely.geometry import Point
import psycopg2
df = pd.read_table('./sample.csv', sep=',', header='infer')
将lat/long
转换为Point
类型,并使用一些空间参考(我使用的是epsg4236
),然后删除lat/long
列,因为您将只上载名称,Point
列
geom = [Point(xy) for xy in zip(df.Longitude, df.Latitude)]
df = df.drop(['Longitude', 'Latitude'], axis=1)
crs = {'init': 'epsg:4326'}
gdf = GeoDataFrame(df, crs=crs, geometry=geom)
gdf.head()
results
Name geometry
0 MEDELLÍN POINT (-75.5760017134 6.248586367430001)
1 ABEJORRAL POINT (-75.42874039039999 5.789301114330001)
2 ABRIAQUÍ POINT (-76.0642948678 6.632281955040001)
3 ALEJANDRÍA POINT (-75.141334501 6.376062642740001)
现在您可以上传到postgres
。创建到postgres的连接
conn = psycopg2.connect("dbname='template1' user='dbuser' host='localhost' password='dbpass'")
gdf.to_sql(`your_table_name`, conn, other options)
请参阅特定版本的
pandas
文档,以了解有关to_sql
到目前为止您尝试了什么的详细信息?你的样本数据在哪里?你有postgis扩展吗?您可以使用ST_MakePoint(long,lat)
在插入前指出一点operation@cmaher我不知道先试试什么。并用示例数据编辑了问题。@Krishna和panda的dataframe中的sql函数支持使用ST_MakePoint?@Krishna,事实上,我不使用postgis,只使用原生点数据类型。谢谢,我会尝试你的答案,稍后再回来。对不起,我有一个问题,我需要postgis在postgres中使用geopandas吗?我可以使用本机点数据类型的列吗?@gabomgp您不能<代码>地理命令库负责lat/long
到点的转换。您需要postgis
在数据库端进行空间查询。