如何在Pandas中多场景拆分经纬度组合列
解决DataFrame中location列多分隔符拆分经纬度的问题
嘿,我来帮你搞定这个经纬度拆分的麻烦!你的location列确实有点棘手,各种分隔方式混在一起:不带空格的-、带空格的/、还有直接用空格分隔的,单一的拆分规则肯定覆盖不全,这里用正则表达式就能一次性搞定所有情况,我给你讲得明明白白的,不用怕看不懂正则~
先看看你的数据样例:
print(df['location']) # 输出: # location # 0 -10.8544921875-49.8238090851324 # 1 2.021484375-59.478568831926 # 2 2.021484375 / 49.823809085 # 3 -10.8544921875/ 59.478568831926 # 4 9.61795 19.33163
解决方案:用正则匹配所有分隔符
我们可以用str.split()配合正则表达式,一次性匹配所有可能的分隔符号。正则表达式写成[-\s/]+就行,我给你拆解开解释:
[]:表示匹配括号里的任意一个字符-:匹配连字符\s:匹配任意空白字符(空格、制表符等)/:匹配斜杠+:表示前面的字符可以出现1次或多次,这样不管分隔符前后有多少空格都能匹配到
然后用这个正则来拆分列,完整代码如下:
import pandas as pd # 构造测试数据 data = { 'location': [ '-10.8544921875-49.8238090851324', '2.021484375-59.478568831926', '2.021484375 / 49.823809085', '-10.8544921875/ 59.478568831926', '9.61795 19.33163' ] } df = pd.DataFrame(data) # 用正则拆分location列,只拆分一次保证分成两列 df[['Long', 'Lat']] = df['location'].str.split(r'[-\s/]+', n=1, expand=True) # 查看结果 print(df[['Long', 'Lat']])
运行结果
Long Lat 0 -10.8544921875 -49.8238090851324 1 2.021484375 -59.478568831926 2 2.021484375 49.823809085 3 -10.8544921875 59.478568831926 4 9.61795 19.33163
完全符合你的期望输出!
补充说明
n=1参数是告诉split()只拆分一次,这样就能保证把内容分成经度和纬度两部分,不会因为数值里的负号而多拆分- 这个正则已经覆盖了你所有的分隔场景,不管是
-、带空格的/还是纯空格都能正确识别
内容的提问来源于stack exchange,提问作者Hamad
相关产品推荐
相关产品推荐

