python写一个通过数据库表A经纬度 匹配表b中经纬度距离小于500米的数据并与表b连接一列A表门店数据
时间: 2024-02-16 22:00:25 浏览: 70
可以使用 Python 中的 geopy 库来计算经纬度之间的距离,使用 pandas 库来进行数据处理,使用 sqlalchemy 库来连接数据库。以下是一个示例代码:
```python
import pandas as pd
from geopy import distance
from sqlalchemy import create_engine
# 连接数据库
engine = create_engine('mysql+pymysql://username:password@host:port/database')
# 读取表A和表B的数据
df_a = pd.read_sql_table('table_a', engine)
df_b = pd.read_sql_table('table_b', engine)
# 计算表A和表B中所有经纬度的距离
distances = []
for lat_a, lon_a in zip(df_a['latitude'], df_a['longitude']):
for lat_b, lon_b, name_b in zip(df_b['latitude'], df_b['longitude'], df_b['name']):
dist = distance.distance((lat_a, lon_a), (lat_b, lon_b)).m
if dist < 500:
distances.append({'name_b': name_b, 'distance': dist})
# 将距离小于500米的结果转换成 DataFrame
df_distances = pd.DataFrame(distances)
# 将表A和表B连接起来,并添加距离小于500米的门店信息
df_result = pd.merge(df_a, df_distances, how='left', on='name_b')
# 输出结果
print(df_result.head())
```
其中,`table_a` 和 `table_b` 分别为表A和表B的表名,`latitude` 和 `longitude` 分别为经度和纬度的列名,`name_b` 为表B中门店名称的列名。代码中使用了嵌套的循环来计算所有经纬度之间的距离,可以考虑使用更高效的算法来优化性能。
阅读全文