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