python - 如何在 Pandas 中贪婪地*提取*纬度和经度?

标签 python regex pandas

我在 Pandas 中有一个像这样的数据框:

        id          loc
 40     100005090   -38.229889,-72.326819   
 188    100020985   ut: -33.442101,-70.650327   
 249    10002732    ut: -33.437478,-70.614637   
 361    100039605   ut: 10.646041,-71.619039    \N
 440    100048229   4.666439,-74.071554

我需要提取 GPS 点。我首先要求包含某个正则表达式(在 SO 中找到,见下文)来匹配具有“有效”纬度/经度值的所有单元格。但是,我还需要提取这些数字,并将它们放入自己的一系列中(然后在逗号上调用 split )或将它们放入两个新的 pandas 系列中。我已经尝试了以下提取部分:

ids_with_latlong["loc"].str.extract("[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$ ”)

但从输出来看,reg exp 并没有贪婪地进行匹配,因为我得到了这样的结果:

    0   1            2      3   4           5   6       7    8
    40  38.229889   .229889 NaN 72.326819   NaN 72  NaN 72  .326819
    188 33.442101   .442101 NaN 70.650327   NaN 70  NaN 70  .650327

显然,它的匹配超出了我的预期(我只需要列 0、1 和 4),但简单地删除它们对我来说太过麻烦。请注意,提取函数在开始时也去掉了 +/- 符号。如果有人有解决方案,我将不胜感激。

最佳答案

@HYRY 的回答对我来说看起来不错。这只是一种使用内置 pandas 方法而不是正则表达式方法的替代方法。我认为它更容易阅读,但我不确定它是否对于您的所有情况都足够通用(尽管它在此示例数据上运行良好)。

df['loc'] = df['loc'].str.replace('ut: ','')
df['lat'] = df['loc'].apply( lambda x: x.split(',')[0] )
df['lon'] = df['loc'].apply( lambda x: x.split(',')[1] )

          id                    loc         lat         lon
0  100005090  -38.229889,-72.326819  -38.229889  -72.326819
1  100020985  -33.442101,-70.650327  -33.442101  -70.650327
2   10002732  -33.437478,-70.614637  -33.437478  -70.614637
3  100039605   10.646041,-71.619039   10.646041  -71.619039
4  100048229    4.666439,-74.071554    4.666439  -74.071554

作为此类方法的一般建议,您可能会考虑执行以下步骤:

1) 使用 replace 删除无关字符(或者这可能是正则表达式最好的地方)

2)分成几部分

3)检查每个部分是否有效(您所需要做的就是检查它是否是一个数字,尽管您可以采取额外的步骤来确保它落入有效纬度或经度的数字范围内)

关于python - 如何在 Pandas 中贪婪地*提取*纬度和经度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31799681/

相关文章:

使用 str_extract_all 在 R 中运行正则表达式 正则表达式尚未实现

java赋值正则表达式

python - Pandas UnicodeEncodeError : 'charmap' codec can't encode character

python - 如何根据同一行中另一列中的值向前填充列值

python - 多重继承和多级继承的区别

python - 计算python中每个逗号后面的数字以及第一个逗号之前的数字

python - 使用MDA分析的PCA(python3.7)

Python正则表达式搜索不后跟字符的十进制数字

python - 根据另一个 DataFrame 选择一个 DataFrame 的列

python - 如何获取 QPaintEvent 覆盖下的小部件以注册鼠标事件