如何使用Pandas将CSV中的UTM坐标转换为经纬度
将CSV中的UTM坐标转换为经纬度(使用Pandas和utm库)
没问题,我来帮你补全代码并详细解释如何完成UTM到经纬度的转换。你已经做了导入库和读取CSV的基础工作,只需要补充转换逻辑就行,先看完整的实现:
# 修正导入语句,使用Pandas常用的pd别名 import pandas as pd import utm # 读取目标CSV文件 df = pd.read_csv("0006.csv") # 定义UTM转经纬度的函数 def utm_to_latlon(easting, northing): # 根据你的数据特征:Y值大于700万,判断为南半球;X值对应UTM带号53(可根据数据实际来源调整) latitude, longitude = utm.to_latlon(easting, northing, 53, 'S') return latitude, longitude # 方式1:逐行处理(代码直观,适合小数据集) df[['Latitude', 'Longitude']] = df.apply( lambda row: pd.Series(utm_to_latlon(row['X'], row['Y'])), axis=1 ) # 方式2:矢量化处理(速度更快,适合百万级大数据集) # lat, lon = utm.to_latlon(df['X'].values, df['Y'].values, 53, 'S') # df['Latitude'] = lat # df['Longitude'] = lon # 查看转换后的核心结果 print(df[['PositionDateTime', 'Latitude', 'Longitude', 'Z']].head()) # 可选:将转换后的数据保存为新CSV # df.to_csv("converted_0006.csv", index=False)
关键细节说明:
- UTM参数确认:
utm.to_latlon()必须指定UTM带号和半球。你的数据中Y值(北向坐标)超过7000000,这是南半球UTM的典型特征;X值668471对应的带号是53(如果数据来自澳大利亚东部、新几内亚等区域,这个带号是准确的,若来源不同,需要根据实际调整)。 - 两种处理方式:
- 逐行
apply()代码逻辑更直观,适合小批量数据调试; - 矢量化处理直接传入整列数据,避免循环,效率提升数倍,适合大规模数据集。
- 逐行
- 结果验证:转换后建议拿1-2个坐标用在线UTM转换工具核对,确保带号和半球参数正确,避免转换偏差。
模拟转换结果(基于你的前5条数据):
PositionDateTime Latitude Longitude Z
0 2018-01-01 00:00:08 -30.301234 153.123456 43.60
1 2018-01-01 00:00:09 -30.301236 153.123456 43.62
2 2018-01-01 00:00:39 -30.301287 153.123470 44.00
3 2018-01-01 00:01:02 -30.301295 153.123473 44.07
4 2018-01-01 00:01:14 -30.301297 153.123473 44.09
(注:以上经纬度为模拟值,实际结果以正确参数转换为准)
内容的提问来源于stack exchange,提问作者YekHan Choy
相关产品推荐
相关产品推荐

