基于PySpark Pandas API提取DataFrame每行数组元素生成经纬度列
从PySpark Pandas DataFrame的Point类型列提取经纬度坐标
场景说明
数据集的location列是Point类型,非空值为包含coordinates数组(格式为[经度, 纬度])和type字段的字典,部分行值为None,需要批量生成longitude(经度)和latitude(纬度)新列。
解决方案
使用PySpark Pandas的assign()结合lambda函数,处理空值的同时批量提取坐标:
import pyspark.pandas as ps # 批量添加经纬度列 results_df = results_df.assign( longitude=lambda df: df['location'].apply(lambda x: x['coordinates'][0] if x is not None else None), latitude=lambda df: df['location'].apply(lambda x: x['coordinates'][1] if x is not None else None) )
代码说明
assign()方法一次性添加两列,保持代码简洁且避免多次修改原DataFrame- 内层lambda先判断
location是否为None,防止访问空值的属性引发错误 - 对有效Point数据,分别提取
coordinates数组的第0位(经度)和第1位(纬度)
验证结果
执行以下代码查看生成的列:
print(results_df[['latitude', 'longitude']].head())
输出示例:
| latitude(纬度) | longitude(经度) |
|---|---|
| 30.385328900508 | -97.707172829666 |
| 39.395338984595 | -74.587966507573 |
| None | None |
| 42.396358150943 | -104.664962196304 |
| None | None |
内容的提问来源于stack exchange,提问作者MyNameHere
相关产品推荐
相关产品推荐

