python - (lat,long)坐标的数据清洗
问题描述
我是 Python 新手,我想了解如何从数据集中删除 0.00000 的值 在上下文中,我正在处理数据集https://www.kaggle.com/ksuchris2000/oklahoma-earthquakes-and-saltwater -注入井
文件 InjectionWells.csv 在其坐标(纬度和经度)中有一些值,我需要删除这些值,但我不知道具体如何删除。这样我就可以用 X 经度和 Y 纬度制作散点图
我尝试了以下但没有奏效。你能指导我吗?
解决方案
- 您需要发现 LAT、LONG 上的异常值
- 你的情节是一种方式,但这是一种自动化的方式
- 首先,用于
dat.info()
查看哪些列是数字的,dtypes 是什么。您对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,.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 百分位数等 - 您可以决定什么是异常值。
推荐阅读
- javascript - 添加 IceCandidate 是强制性的吗?
- python - 在多列上使用 groupby 函数的 Python 查询
- python - 使用 pool.map_async 在 python 中进行多处理
- sql - 将 sql 导入 pgAdmin
- reactjs - 如何以编程方式关闭 chakra Ui 中的抽屉
- bash - Bash中-z命令的否定是什么?
- php - Twig / Symfony:我无法访问我的关系变量
- c - 我们如何知道 C 中的文件中存在漏洞?
- kubernetes - 使用具有多个静态 IP 地址的 Cloud NAT 时,是否可以在 GKE 中为 Pod 分配特定的出站 IP 地址?
- typescript - 如何修复 redux-toolkit 中的 typescript 错误?