「目录」
数据清洗和准备
Data Cleaning and Prepration
7.1 => 处理缺失数据
7.2 => 数据转换
--------> 移除重复数据
--------> 利⽤函数或映射进行数据转换
--------> 替换值
--------> 重命名轴索引
--------> 离散化和面元划分
--------> 检测和过滤异常值
7.3 => 字符串操作
检测和过滤异常值
嗯,距离上一次更新笔记还是去年...,今天再往下面章节推进一点吧。
过滤或变换异常值在很大程度上就是运用数组运算。
前排提示,本篇笔记主要讲了describe方法,any方法和np.sign方法。
来看一个DataFrame,这里用np.random.randn生成了正态分布的数据:
In [1]: import numpy as np
In [2]: import pandas as pd
In [3]: data = pd.DataFrame(np.random.randn(1000, 4))复制
describe()方法会统计DataFrame中每一个column里的count数量,mean平均值,std标准差,std标准差,max最大值,百分位值。
In [4]: data.describe()
Out[4]:
0 1 2 3
count 1000.000000 1000.000000 1000.000000 1000.000000
mean 0.007525 -0.008104 0.032856 0.018571
std 1.053115 1.016978 0.989279 1.022208
min -3.642000 -3.337398 -3.221536 -3.129636
25% -0.713827 -0.684061 -0.642646 -0.689392
50% 0.020200 0.096489 0.018625 0.045681
75% 0.725778 0.690407 0.708214 0.699719
max 3.641040 2.943599 3.106397 3.504886复制
假设我们想要找出绝对值大小大于3的值:
In [5]: col = data[2]
In [6]: col[np.abs(col)>3]
Out[6]:
383 -3.221536
465 3.106397
630 3.075631
Name: 2, dtype: float64复制
要选出全部含有大于3或小于-3的值的行,可以在布尔型DataFrame中使用any方法。
In [7]: data[(np.abs(data)>3).any(1)]
Out[7]:
0 1 2 3
10 3.115197 -0.429293 -1.488574 -1.248832
41 -3.236021 0.846668 -0.462576 -0.770415
60 -1.245012 1.518076 -1.292043 3.219340
195 -3.111161 -0.341791 0.797307 0.090476
239 -3.140475 -0.392564 -0.491919 0.917431
372 3.641040 -1.095120 0.714931 -1.225775
383 1.164054 -2.047523 -3.221536 -0.548215
458 -3.642000 1.566959 0.385317 0.637622
465 0.198955 -1.031466 3.106397 -1.072903
514 -0.784815 1.952474 0.635436 3.504886
537 -0.799796 -3.337398 0.858902 -0.433413
630 0.226837 -0.328830 3.075631 2.471823
672 0.094143 0.131909 -0.359841 3.003043
742 -0.378700 0.817330 -1.227877 -3.129636
771 -0.957550 -3.304534 -1.150420 1.925189
828 -3.057687 0.248392 -0.112263 -0.265542
883 -2.000208 0.728119 -0.304764 3.152761复制
any方法和all方法是相反的,any只要存在不为0就是True,all方法只有都不为0才为True。
In [11]: np.array([1, 0, 2, 3]).any()
Out[11]: True
In [12]: np.array([1, 0, 2, 3]).all()
Out[12]: False复制
然后我们看一下any(1)和any(0)有什么区别,any()里的0或1对应axis轴的方向,看下面的例子吧,应该一看就明白了。
In [13]: sample = pd.DataFrame([[0,1,2,3],[-2,-1,0,1],[3,4,5,6]])
In [14]: sample
Out[14]:
0 1 2 3
0 0 1 2 3
1 -2 -1 0 1
2 3 4 5 6
In [15]: sample.any(0)
Out[15]:
0 True
1 True
2 True
3 True
dtype: bool
In [16]: sample.any(1)
Out[16]:
0 True
1 True
2 True
dtype: bool复制
根据数据的值是正的还是负的,np.sign()可以生成1和-1。
In [10]: np.sign(data).head()
Out[10]:
0 1 2 3
0 -1.0 1.0 -1.0 -1.0
1 -1.0 1.0 1.0 1.0
2 1.0 -1.0 1.0 1.0
3 -1.0 1.0 -1.0 -1.0
4 1.0 -1.0 -1.0 -1.0复制
下面的代码可以把值限定在-3到3之间,看统计信息里的min和max值哦:
In [8]: data[np.abs(data)>3] = np.sign(data) * 3
In [9]: data.describe()
Out[9]:
0 1 2 3
count 1000.000000 1000.000000 1000.000000 1000.000000
mean 0.007956 -0.007462 0.032896 0.017820
std 1.047111 1.014984 0.988019 1.019082
min -3.000000 -3.000000 -3.000000 -3.000000
25% -0.713827 -0.684061 -0.642646 -0.689392
50% 0.020200 0.096489 0.018625 0.045681
75% 0.725778 0.690407 0.708214 0.699719
max 3.000000 2.943599 3.000000 3.000000复制
这篇好短,下一篇笔记是排列和随机采样。BYE-BYE。大家新年快乐!

往期回顾



Stay hungry, stay foolish
文章转载自Yuan的学习笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
[MYSQL] 服务器出现大量的TIME_WAIT, 每天凌晨就清零了
大大刺猬
143次阅读
2025-04-01 16:20:44
演讲实录|分布式 Python 计算服务 MaxFrame 介绍及场景应用方案
阿里云大数据AI技术
121次阅读
2025-03-17 13:27:37
mysql提升10倍count(*)的神器
大大刺猬
120次阅读
2025-03-21 16:54:21
官宣,Milvus SDK v2发布!原生异步接口、支持MCP、性能提升
ZILLIZ
96次阅读
2025-04-02 09:34:13
[MYSQL] query_id和STATEMENT_ID在不同OS上的关系
大大刺猬
64次阅读
2025-03-26 19:08:13
DataWorks :Data+AI 一体化开发实战图谱
阿里云大数据AI技术
46次阅读
2025-03-19 11:00:55
国密算法介绍
漫步者
44次阅读
2025-03-21 09:20:39
如何使用 RisingWave 和 PuppyGraph 构建高性能实时图分析框架
RisingWave中文开源社区
37次阅读
2025-03-18 10:49:54
WingPro for Mac 强大的Python开发工具 v10.0.9注册激活版
一梦江湖远
33次阅读
2025-03-29 10:33:27
python操作MySQL数据库
怀念和想念
29次阅读
2025-03-30 23:22:07