在熊猫列中查找正则表达式模式

时间:2019-09-23 17:11:02

标签: python pandas

在大熊猫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

2 个答案:

答案 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