从熊猫数据框中插入几何点mysql

Posted

技术标签:

【中文标题】从熊猫数据框中插入几何点mysql【英文标题】:Insert geometry point mysql from pandas Dataframe 【发布时间】:2017-03-08 13:35:59 【问题描述】:

我正在使用 pandas 和 Dataframe 来处理一些数据。我想将数据加载到其中一个字段是点的 mysql 数据库中。

在我用 python 解析的文件中,我有点的纬度和经度。

我创建了一个带有点信息(id 和坐标)的数据框(df):

id   coords
 A  GeomFromText( ' POINT(40.87 3.80) ' )

我已将 mySQL 中用于从文本创建点所需的命令保存在坐标中。但是,执行时:

from sqlalchemy import create_engine
engine = create_engine(dbconnection)

df.to_sql("point_test",engine, index=False, if_exists="append")

我收到以下错误:

DataError: (mysql.connector.errors.DataError) 1416 (22003): 无法获取 来自您发送到 GEOMETRY 字段的数据中的几何对象

因为 df.to_sql 转换 GeomFromText( ' POINT(40.87 3.80) ' ) 转换成字符串 "GeomFromText( ' POINT(40.87 3.80) ' )" 当它应该是在 mySQL 中执行函数 GeomFromText 时。

有人对如何使用 pandas 数据框以文本形式在 mySQL 几何字段中插入原始信息有建议吗?

【问题讨论】:

【参考方案1】:

一种解决方法是使用需要添加的几何信息的字符串创建一个临时表,然后通过从临时表调用 ST_GeomFromText 来更新 point_test 表。

假设数据库的表 point_test 具有 id (VARCHAR(5)) 和 coords(POINT):

a.以点“A”和“B”为例创建数据框df

dfd = np.array([['id','geomText'],
            ["A","POINT( 50.2 5.6 )"],
            ["B","POINT( 50.2 50.4 )"]])

df=pd.DataFrame(data=dfd[1:,:], columns=dfd[0,:])

b.将点“A”和“B”添加到point_test中,但只添加id并将字符串“geomText”添加到表temp_point_test中

df[['id']].to_sql("point_test",engine, index=False, if_exists="append")

df[['id', 'geomText']].to_sql("temp_point_test",engine, index=False, if_exists="append")

c。使用表 temp_point_test 中的点更新表 point_test,将 ST_GeomFromText() 应用于选择。最后,删除 temp_point_test:

conn = engine.connect()

conn.execute("update point_test pt set pt.coords=(select ST_GeomFromText(geomText) from temp_point_test tpt "+
                     "where pt.id=tpt.id)")

conn.execute("drop table temp_point_test")   

conn.close()

【讨论】:

以上是关于从熊猫数据框中插入几何点mysql的主要内容,如果未能解决你的问题,请参考以下文章

在熊猫数据框中为每个组插入缺失的类别

如何在熊猫数据框中拆分值并插入新行?

通过某些(索引)参数将值插入熊猫数据框中“适当”位置的最佳方法是啥?

如何在 Pandas 数据框中的特定位置插入一列? (更改熊猫数据框中的列顺序)

填补熊猫数据框中的日期空白

从工作台向 MySQL 8.0 中插入一个点