如何将数组中的lon与lat坐标变量配对保存为CSV文件
问题:将经纬度数组配对保存为每行一对的CSV文件
原始数据
拥有lon和lat两个坐标数组,数据如下:
(array([-50.940605, -37.424145, -41.501717, -37.98916 , -60.632664, -38.158283, -58.0372 , -39.06596 , -60.815792, -49.303684, -38.46074 , -50.979015, -38.479317, -58.656593, -38.40213 , -38.007423, -43.785126, -57.75844 , -42.781937, -74.90217 , -34.498913, -49.227158, -96.485504, -72.128716, -39.414085], dtype=float32), array([-15.90009 , -15.913551 , -15.7658 , -16.47591 , -4.1940403 , -14.563205 , -6.032389 , -14.852597 , -4.24735 , 15.848547 , -14.71412 , -17.052591 , -14.079368 , -5.9365387 , -14.50551 , -16.48979 , -16.616753 , -0.23096395, -15.882113 , -5.0795455], dtype=float32))
期望输出格式
希望保存为每行一对经纬度的CSV:
-50.940605,-15.90009 -37.424145,-15.913551 -41.501717,-15.7658 -37.98916,-16.47591 -60.632664,-4.1940403 -38.158283,-14.563205 .... 以此类推
现有代码及错误输出
使用以下代码保存:
coord_file = (flag_lon.data[0:100], flag_lat.data[0:100]) # 从NetCDF文件提取的变量 np.savetxt('coord_file.csv', coord_file, delimiter=",", fmt="%s") print(open("coord_file.csv").read())
得到的错误输出是将所有经度放在一行、所有纬度放在一行:
-50.940605,-37.424145,-41.501717,-37.98916,-60.632664,-38.158283,-58.0372,-39.06596,-60.815792,-49.303684,-38.46074,-50.979015,-38.479317,-58.656593,-38.40213,-38.007423,-43.785126 -15.90009,-15.913551,-15.7658,-16.47591,-4.1940403,-14.563205,-6.032389,-14.852597,-4.24735,15.848547,-14.71412,-17.052591,-14.079368,-5.9365387,-14.50551,-16.48979,-16.616753,-0.23096395,-15.882113,-5.0795455,-20.313402,15.771035,-7.3693175,-7.8538485,-14.27069,-16.976015,
解决方案
问题根源是传入np.savetxt的是两个一维数组组成的元组,它会将每个数组作为单独一行输出。要实现每行一对坐标,需要将两个数组按列拼接成二维数组,让每一行对应一组经纬度。
修改后的代码:
import numpy as np # 提取前100个经纬度数据(若两个数组长度不一致,会自动截断到较短的长度) lon = flag_lon.data[0:100] lat = flag_lat.data[0:100] # 将两个一维数组按列拼接成N行2列的二维数组 coord_pairs = np.column_stack((lon, lat)) # 保存到CSV文件,指定分隔符和浮点数格式 np.savetxt('coord_file.csv', coord_pairs, delimiter=",", fmt="%f") # 验证输出结果 print(open("coord_file.csv").read())
补充说明
np.column_stack((lon, lat))会把两个一维数组组合成二维数组,结构为[[lon1, lat1], [lon2, lat2], ..., [lonN, latN]],正好符合CSV每行一对的要求。- 如果需要处理经纬度数组长度不一致的情况,可以先截取到共同长度:
min_length = min(len(lon), len(lat)) coord_pairs = np.column_stack((lon[:min_length], lat[:min_length]))
内容的提问来源于stack exchange,提问作者Saulo Carvalho
相关产品推荐
相关产品推荐

