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

问题描述

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

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

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

解决方法

  1. 您需要发现 LAT、LONG 上的异常值
    • 你的情节是一种方式,但这是一种自动化的方式
  2. 首先,使用 dat.info() 查看哪些列是数字的,dtype 是什么。您对LATLONG感兴趣。
  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,.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',.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 等百分位数 - 您可以决定什么构成异常值。

,

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

data = df[['LONG','LAT']]
data = data[data['LONG'] < -75]