将坐标循环到字符串重复len(x)次

时间:2018-05-25 13:57:25

标签: python pandas loops dataframe

我有一个填充了lat和lng坐标的DataFrame,如下所示:

     lat        lng
0   -33.859485  151.208584
1   -33.868370  151.207141
2   -33.861735  151.210873

Googlemaps使用以下字符串在地图上放置标记,我将其称为new_marker:

new_marker = '&markers=size:mid%7Ccolor:0x0000b3%7Clabel:G%7C'+str(lat)+'+'+str(lng)

我怎样才能创建一个循环来创建一个字符串new_marker重复xx,在这种情况下是数据框中的坐标数),每次重复都有从数据框输入的相应latlng

实际上,我希望能够生成这样的内容:

'&markers=size:mid%7Ccolor:0x0000b3%7Clabel:G%7C+lat0+lng0&markers=size:mid%7Ccolor:0x0000b3%7Clabel:G%7C+lat1_lng1&markers=size:mid%7Ccolor:0x0000b3%7Clabel:G%7C+lat2+lng2'

我对fordef的体验非常有限。

1 个答案:

答案 0 :(得分:0)

使用pandas apply methodstring formatting可以轻松创建与每个lat和lng对应的字符串。

第一步是定义给定行的函数,生成所需的字符串:

def coord_formatter(row):
    return '&markers=size:mid%7Ccolor:0x0000b3%7Clabel:G%7C{:.6f}+{:.6f}'.format(row['lat'],row['lng'])

这基本上将row['lat']替换为字符串中存在{:.6f}的位置,格式为6位小数浮点数,lng指向第二位。

然后,可以创建新列:

df['string'] = df.apply(coord_formatter,axis=1)
# Output df
#          lat         lng                                             string
# 0 -33.859485  151.208584  &markers=size:mid%7Ccolor:0x0000b3%7Clabel:G%7...
# 1 -33.868370  151.207141  &markers=size:mid%7Ccolor:0x0000b3%7Clabel:G%7...
# 2 -33.861735  151.210873  &markers=size:mid%7Ccolor:0x0000b3%7Clabel:G%7...

或者,要创建一个字符串:

output = '\n'.join(df.apply(coord_formatter,axis=1))
# print(output) produces
# &markers=size:mid%7Ccolor:0x0000b3%7Clabel:G%7C-33.859485+151.208584
# &markers=size:mid%7Ccolor:0x0000b3%7Clabel:G%7C-33.868370+151.207141
# &markers=size:mid%7Ccolor:0x0000b3%7Clabel:G%7C-33.861735+151.210873

现在每个坐标字符串之间用一个断开线分开,只有一个字符串,其中所有这些字符串都是简单连接的,''.join(...可以用来代替。