在大熊猫DataFrame
中,我具有以下列:
df1 = pd.DataFrame({'id': [1,2], 'coords':['-43.22 -22.15 -43.16 -22.19','-43.32 -22.18 -43.136 -22.149']})
'coords'
列包含纬度和经度值。因此,我需要从'coords'
列创建两列'latitude'
和'longitude'
。我考虑过使用正则表达式re
库进行此操作。纬度值始终以字符串-4
和经度-2
开头,并用空格分隔。然后如何使用正则表达式创建以-4
开头并以空格结尾的纬度列和以-2
开头并以空格结尾的经度列?
输出示例:
id | latitude | longitude
1 | -43.22, -43.16 | -22.15, -22.19
2 | -43.32, -43.136| -22.18, -22.149
答案 0 :(得分:3)
这似乎不需要正则表达式就可以更轻松地完成。例如,如果您的原始coords
数据结构定义如下:
data = ['-43.22 -22.15 -43.16 -22.19', '-43.32 -22.18 -43.136 -22.149']
您可以在空白处分割它们:
data_split = [d.split() for d in data]
# [['-43.22', '-22.15', '-43.16', '-22.19'],
# ['-43.32', '-22.18', '-43.136', '-22.149']]
然后分别为坐标分配值:
lat = [[d[0], d[2]] for d in data_split]
lon = [[d[1], d[3]] for d in data_split]
df1 = pd.DataFrame({'id': [1,2], 'lat': lat, 'lon': lon})
# id lat lon
# 1 [-43.22, -43.16] [-22.15, -22.19]
# 2 [-43.32, -43.136] [-22.18, -22.149]
答案 1 :(得分:1)
自从您问到regex
解决方案
s_lat = df1.coords.str.extractall(r'(-4\w*\.?\w+)\s*').unstack().agg(', '.join, axis=1)
s_long = df1.coords.str.extractall(r'(-2\w*\.?\w+)\s*').unstack().agg(', '.join, axis=1)
df1[['id']].assign(**{'Latitude': s_lat, 'Longtitude': s_long})
Out[312]:
id Latitude Longtitude
0 1 -43.22, -43.16 -22.15, -22.19
1 2 -43.32, -43.136 -22.18, -22.149