如何使用to_sql方法使用postgresql和pandas用点数据类型的列填充表?

如何使用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

我有一个有很多列的Excel。其中的两列是纬度和经度。我需要使用Pandas将数据从excel导入PostgreSQL中的表。PG中的表有一列而不是两列。这一列有名称坐标,其类型为点

例如,excel数据包含:

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
在数据库端进行空间查询。