我有一个.txt数据,其中第6列和第7列是以下形式的GPS位置:
50;18.5701400N,4;07.7693770E
Run Code Online (Sandbox Code Playgroud)
当我通过read_csv读取它时,我尝试使用转换器将其转换为笛卡尔坐标.我为转换器编写了函数
convertFunc = lambda x : float((x[0:5]+x[6:12]).replace(';','.'))
convert = {6:convertFunc,7:convertFunc}
Run Code Online (Sandbox Code Playgroud)
当我在单个值上使用它时,我的工作方式如下:
convertFunc(myData.Lat[1])
Out [159]: 55.187110250000003
Run Code Online (Sandbox Code Playgroud)
当我尝试在read_csv中使用它时,它不起作用
myData = DataFrame(read_csv('~/data.txt', sep=',' names=['A', 'B', 'C', 'D', 'E', 'Lat', 'Long'],converters=convert))
Run Code Online (Sandbox Code Playgroud)
我有一个错误:
...
convertFunc = lambda x : float((x[0:5] + x[6:12]).replace(';', '.'))
ValueError: invalid literal for float(): DGPS ongitu
Run Code Online (Sandbox Code Playgroud)
我不知道它在哪里出错或者我在转换器中误解了什么?或者也许有人知道以这种形式处理GPS数据的好方法(包)?
(我认为这可能是有些问题,lambda当我想要我的功能应用到专栏中,我有一个错误:TypeError: only length-1 arrays can be converted to Python scalars)
转换器有点hacky; 我可以推荐一些更健壮的东西吗?
def convert_dmds(s):
deg, min = s[:-1].split(';')
sign = 1 if s[-1] in 'NE' else -1
return sign * (float(deg) + float(min) / 60.0)
def convert_gps(s):
lat, lon = s.split(',')
return (convert_dmds(lat), convert_dmds(lon))
Run Code Online (Sandbox Code Playgroud)
此外,错误表明您正在尝试转换显然不是GPS字符串的内容 - 也许是标题行?
| 归档时间: |
|
| 查看次数: |
6295 次 |
| 最近记录: |