(横向、纵向)坐标的数据清理

2024-09-30 14:23:20 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我尝试了以下方法,但没有成功。你能指引我吗


Tags: and文件数据httpscomwwwinjection新手
2条回答
  1. 您需要在LAT、LONG上发现异常值
    • 您的绘图是单向的,但这里有一种自动方式
  2. 首先,使用^{}查看哪些列是数字的,哪些数据类型是数字的。您对LATLONG感兴趣
  3. 在您感兴趣的两列上使用^{}获得描述性统计数据并找出它们的异常值。
  • .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百分位数等-您可以决定什么构成异常值

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

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

相关问题 更多 >