从熊猫数据框中插入几何点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的主要内容,如果未能解决你的问题,请参考以下文章
通过某些(索引)参数将值插入熊猫数据框中“适当”位置的最佳方法是啥?