首页 > 解决方案 > (lat,long)坐标的数据清洗

问题描述

我是 Python 新手,我想了解如何从数据集中删除 0.00000 的值 在上下文中,我正在处理数据集https://www.kaggle.com/ksuchris2000/oklahoma-earthquakes-and-saltwater -注入井

文件 InjectionWells.csv 在其坐标(纬度和经度)中有一些值,我需要删除这些值,但我不知道具体如何删除。这样我就可以用 X 经度和 Y 纬度制作散点图

我尝试了以下但没有奏效。你能指导我吗?

标签: pythonpandasgeospatiallatitude-longitude

解决方案


  1. 您需要发现 LAT、LONG 上的异常值
    • 你的情节是一种方式,但这是一种自动化的方式
  2. 首先,用于dat.info()查看哪些列是数字的,dtypes 是什么。您对LAT,感兴趣LONG
  3. 在您感兴趣的两列上使用dat[['LAT','LONG']].describe()以获得描述性统计数据并找出它们的异常值。
  • .describe()接受一个percentiles列表参数,默认为 [.25, .5, .75],返回第 25、第 50 和第 75 个百分位数。
  • ..但是您想排除稀有/异常值,因此请尝试包括(例如)第 1/99 和第 5/95 百分位数
>>> pd.options.display.float_format = '{:.2f}'.format  # suppress unwanted dp's
>>> dat[['LAT','LONG']].describe(percentiles=[.01,.05,.1,.25,.5,.9,.95,.99])
# OR:
>>> dat[dat['LAT'].between(33.97,36.96) & dat['LONG'].between(-101.80,-95.48)]

           LAT     LONG
count 11125.00 11125.00
mean     35.21   -96.85
std       2.69     7.58
min       0.00  -203.63
1%       33.97  -101.80  # <---- 1st percentile
5%       34.20   -99.76
10%      34.29   -98.25
25%      34.44   -97.63
50%      35.15   -97.37
90%      36.78   -95.95
95%      36.85   -95.74
99%      36.96   -95.48  # <---- 99th percentile
max      73.99    97.70

因此,您的 LAT 和 LONG 值的第 1-99 个百分位数范围是:

  33.97 <= LAT  <=  36.96
-101.80 <= LONG <= -95.48
  1. 所以现在你可以用一行排除这些apply(..., axis=1)
    dat2 = dat[ dat.apply(lambda row: (33.97<=row['LAT']<= 36.96) and (-101.80<=row['LONG']<=-95.48), axis=1) ]

                   API#                                Operator  Operator ID WellType  ...                                   ZONE Unnamed: 18  Unnamed: 19 Unnamed: 20
    0     3500300026.00                   PHOENIX PETROCORP INC     19499.00       2R  ...                               CHEROKEE         NaN          NaN         NaN
    ...             ...                                     ...          ...      ...  ...                                    ...         ...          ...         ...
    11121 3515323507.00  SANDRIDGE EXPLORATION & PRODUCTION LLC     22281.00       2D  ...                    MUSSELLEM, OKLAHOMA         NaN          NaN         NaN
    
    [10760 rows x 21 columns]

请注意,这已从 11125 行减少到 10760 行。所以我们删除了 365 行。

最后,检查过滤的极值LAT, LONG是否在您预期的范围内总是一个好主意:

>>> dat2[['LAT','LONG']].describe(percentiles=[.01,.05,.1,.25,.5,.9,.95,.99])
           LAT     LONG
count 10760.00 10760.00
mean     35.33   -97.25
std       0.91     1.11
min      33.97  -101.76
1%       34.08  -101.62
5%       34.21   -99.19
10%      34.30   -98.20
25%      34.44   -97.62
50%      35.13   -97.36
90%      36.77   -95.99
95%      36.83   -95.80
99%      36.93   -95.56
max      36.96   -95.49

PS 取第 1/99 个百分位数并没有什么神奇之处。你可以自己玩describe(... percentiles)。您可以使用 0.005、0.002、0.001 百分位数等 - 您可以决定什么是异常值。


推荐阅读