(lat,long)坐标的数据清洗

Data cleaning of (lat,long) coordinates

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

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

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

您可以通过将数据框的一列与单个值进行比较来创建布尔序列。然后您可以使用该系列来索引数据框,以便仅选择满足条件的那些行:

data = df[['LONG', 'LAT']]
data = data[data['LONG'] < -75]
  1. 您需要发现 LAT、LONG 上的异常值
    • 你的情节是一种方式,但这是一种自动化的方式
  2. 首先,使用dat.info()查看哪些列是数字,数据类型是什么。您对 LATLONG
  3. 感兴趣
  4. 对您感兴趣的两列使用 dat[['LAT','LONG']].describe() 以获得描述性统计数据并找出它们的离群值。
  • .describe() 接受一个参数 percentiles 这是一个列表,它默认为 [.25, .5, .75],其中 returns 第 25、50 和 75 个百分位数。
  • ..但您想排除 rare/outlier 值,因此 尝试包括(比如说)第 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):
  2. 排除这些
    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 百分位数等 - 您可以决定异常值的构成。