如何解决(lat,long) 坐标的数据清洗
我是 Python 新手,我想了解如何从数据集中删除 0.00000 的值 在上下文中,我正在处理数据集 https://www.kaggle.com/ksuchris2000/oklahoma-earthquakes-and-saltwater-injection-wells
文件 InjectionWells.csv 的坐标(纬度和经度)中有一些值,我需要删除这些值,但我不知道具体是如何删除的。这样我就可以用 X 经度和 Y 纬度制作散点图
我尝试了以下但没有奏效。你能指导我吗?
解决方法
- 您需要发现 LAT、LONG 上的异常值
- 你的情节是一种方式,但这是一种自动化的方式
- 首先,使用
dat.info()
查看哪些列是数字的,dtype 是什么。您对LAT
、LONG
感兴趣。 - 在您感兴趣的两列上使用
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
- 所以现在您可以使用一行
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]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。