Pandas:拆分列中元组数据,生成独立纬度、经度列
提取Country_cord列中的经纬度到独立列
Hey there! 针对你已经生成的Country_cord列,我来分享两种简单高效的方法,把里面的纬度和经度分别提取到lat和lon列中:
方法1:用lambda函数逐个提取
这种方法直观易懂,适合分步处理:
# 提取纬度:访问元组的第二个元素的第一个值 df['lat'] = df['Country_cord'].apply(lambda x: x[1][0] if x is not None else None) # 提取经度:访问元组的第二个元素的第二个值 df['lon'] = df['Country_cord'].apply(lambda x: x[1][1] if x is not None else None)
- 为什么要加
if x is not None?因为geolocator.geocode()可能会返回None(比如某些国家名称无法匹配到地理坐标),加上这个判断可以避免触发TypeError。 - 逻辑说明:
x代表Country_cord列的每一个元素,x[1]就是包含经纬度的子元组,x[1][0]对应纬度,x[1][1]对应经度。
方法2:用pd.Series一次性展开两列
这种方法更简洁,能同时生成lat和lon列:
import pandas as pd # 将经纬度元组直接展开为两列 df[['lat', 'lon']] = df['Country_cord'].apply( lambda x: pd.Series(x[1]) if x is not None else pd.Series([None, None]) )
- 这里利用
pd.Series把经纬度元组转换成一个包含两个元素的Series,Pandas会自动把它拆分成两列赋值给lat和lon。 - 同样处理了
x is None的情况,保证数据的完整性。
注意事项
- 确保
Country_cord列的元素结构是统一的:(国家名称, (纬度, 经度)),如果有特殊格式的元素,可能需要额外做格式校验。 - 处理完后可以用
df[['lat', 'lon']].isnull().sum()检查一下有多少行没有匹配到坐标,方便后续的清洗工作。
内容的提问来源于stack exchange,提问作者punit kumar Sharma
相关产品推荐
相关产品推荐

