如何查看DataFrame中lat或long相同的title条目并实现可视化?
实现思路与可视化方案
数据预处理
首先得把lat和long从字符类型转成数值型,不然没法做坐标相关的计算和可视化:
import pandas as pd # 转换类型,异常值转成NaN sure['lat'] = pd.to_numeric(sure['lat'], errors='coerce') sure['long'] = pd.to_numeric(sure['long'], errors='coerce') # 移除转换后出现的空值行(按需调整) sure = sure.dropna(subset=['lat', 'long'])
标记重复坐标组
给重复的lat或long分组,方便后续可视化区分:
# 给每个重复lat分配组ID sure['lat_group'] = sure.groupby('lat').ngroup() # 给每个重复long分配组ID sure['long_group'] = sure.groupby('long').ngroup() # 生成综合标记:标注是共享纬度、共享经度还是唯一坐标 sure['shared_type'] = sure.apply( lambda x: f"共享纬度组{x['lat_group']}" if sure['lat'].eq(x['lat']).sum()>1 else f"共享经度组{x['long_group']}" if sure['long'].eq(x['long']).sum()>1 else '唯一坐标', axis=1 )
可视化方案
方案1:散点图(直观展示坐标分布与重复条目)
用散点图展示所有坐标点,不同颜色区分重复组,同时标注title,一眼就能看到哪些条目共享坐标:
import matplotlib.pyplot as plt plt.figure(figsize=(12, 8)) # 按分组绘图 for group, data in sure.groupby('shared_type'): plt.scatter(data['long'], data['lat'], label=group, alpha=0.7) # 只给重复组加标注,避免唯一点的标注杂乱 if group != '唯一坐标': for idx, row in data.iterrows(): plt.annotate(row['title'], (row['long'], row['lat']), fontsize=9, xytext=(3,3), textcoords='offset points') plt.xlabel('经度') plt.ylabel('纬度') plt.title('共享纬度/经度的Title条目分布') plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left') plt.grid(True) plt.tight_layout() plt.show()
方案2:分组条形图(聚焦重复条目细节)
如果更关注哪些title共享同一个坐标值,用条形图配合文本输出,能清晰看到分组关系:
# 筛选出重复纬度的条目 lat_dup = sure[sure.duplicated('lat', keep=False)].sort_values('lat') # 筛选出重复经度的条目 long_dup = sure[sure.duplicated('long', keep=False)].sort_values('long') # 绘制共享纬度的条形图 plt.figure(figsize=(10, 6)) plt.barh(lat_dup['title'], lat_dup['lat'], color='skyblue') plt.xlabel('纬度') plt.title('共享同一纬度的Title条目') plt.tight_layout() plt.show() # 绘制共享经度的条形图 plt.figure(figsize=(10, 6)) plt.barh(long_dup['title'], long_dup['long'], color='salmon') plt.xlabel('经度') plt.title('共享同一经度的Title条目') plt.tight_layout() plt.show() # 打印具体分组信息 print("=== 共享同一纬度的条目 ===") for lat, group in lat_dup.groupby('lat'): print(f"纬度 {lat}: {', '.join(group['title'].tolist())}") print("\n=== 共享同一经度的条目 ===") for long, group in long_dup.groupby('long'): print(f"经度 {long}: {', '.join(group['title'].tolist())}")
注意事项
- 数据量较大时,散点图标注会拥挤,建议只展示重复组,或者用Plotly等交互式工具实现缩放查看。
- 转换数值类型时,异常字符会被转为NaN,需根据业务需求决定是否保留或处理这些行。
内容的提问来源于stack exchange,提问作者Rakesh Chand
相关产品推荐
相关产品推荐

