pandas基础(3)_数据处理
1:删除重复数据
使用duplicate()函数检测重复的行,返回元素为bool类型的Series对象,每个元素对应一行,如果该行不是第一次出现,则元素为true
>>> df =DataFrame(np.random.randint(0,150,size=(6,3)),columns=['Chinese','maths','Chinese'],index=['zhangsan','lisi','wangwu','lisi','xiaowu','zhangsan'])
>>> df
Chinese maths Chinese
zhangsan 17 58 70
lisi 88 20 137
wangwu 130 29 57
lisi 71 20 65
xiaowu 133 60 6
zhangsan 96 48 60
>>> df.duplicated()
zhangsan False
lisi False
wangwu False
lisi False
xiaowu False
zhangsan False
dtype: bool
>>> df =DataFrame(np.random.randint(0,2,size=(6,2)),columns=['Chinese','maths'],index=['zhangsan','lisi','wangwu','lisi','xiaowu','zhangsan'])
>>> df
Chinese maths
zhangsan 1 1
lisi 1 0
wangwu 0 0
lisi 1 0
xiaowu 1 1
zhangsan 0 0
>>> df.duplicated ()
zhangsan False
lisi False
wangwu False
lisi True
xiaowu True
zhangsan True
dtype: bool
>>> #如果出现的数据一样,则会返回true
>>> #调用drop_duplicates()可以删除重复的数据
>>> df.drop_duplicates ()
Chinese maths
zhangsan 1 1
lisi 1 0
wangwu 0 0
>>> #删除的是行
>>> #rename()函数替换索引
>>> #map():新建一列
>>> #replace()替换元素
2:异常值检测和过滤
>>> #使用describe()函数查看每一列的描述统计量
>>> df =DataFrame(np.random.randint(0,150,size=(6,2)),columns=['Chinese','maths'],index=[list('ABCDEF')])
>>> df
Chinese maths
A 119 25
B 28 33
C 10 134
D 44 121
E 44 119
F 91 46
>>> df.describe ()
Chinese maths
count 6.000000 6.000000
mean 56.000000 79.666667#平均值
std 40.943864 50.014665
min 10.000000 25.000000
25% 32.000000 36.250000
50% 44.000000 82.500000
75% 79.250000 120.500000
max 119.000000 134.000000
>>> #std是标准方差
>>> df.std ()
Chinese 40.943864
maths 50.014665
dtype: float64
>>> df.std(axis=1)
A 66.468037
B 3.535534
C 87.681241
D 54.447222
E 53.033009
F 31.819805
dtype: float64
>>> #每个人的标准差
>>> np.abs(df)>df.std()*2
Chinese maths
A True False
B False False
C False True
D False True
E False True
F True False
>>> #当某个方差大于标准方差的2倍时认为这两个数特殊,返回true,这时筛选出来
>>> df.any(axis=1)
A True
B True
C True
D True
E True
F True
dtype: bool
>>> df2=np.abs(df)>df.std()*2
>>> df3=df2.any(axis=1)
>>> df[df3]
Chinese maths
A 119 25
C 10 134
D 44 121
E 44 119
F 91 46
>>> df2=np.abs(df)>df.std()*2
>>> df2
Chinese maths
A True False
B False False
C False True
D False True
E False True
F True False
>>> df2.any()
Chinese True
maths True
dtype: bool
>>> df2.all()
Chinese False
maths False
dtype: bool
>>> df3=df2.any(axis=1)
>>> df3
A True
B False
C True
D True
E True
F True
dtype: bool
>>> df[df3]
Chinese maths
A 119 25
C 10 134
D 44 121
E 44 119
F 91 46
3:随机排序
>>> x=np.random.permutation (6)
>>> x
array([4, 5, 1, 0, 3, 2])
>>> df.take(x)
Chinese maths
E 44 119
F 91 46
B 28 33
A 119 25
D 44 121
C 10 134
>>> #使用take(函数排序,可以借助np.random.pemutation()函数随机排序,可以用来随机抽样
4:数据聚合
>>> #通常是每一个数组生成一个具体的值
>>> #1分组 2用函数处理 3合并
>>> #核心函数groupby()
>>> df = DataFrame({'item':['apple','banana','orange','banana','orange','apple'],'price':[4,3,3,2.5,4,2],'color':['red','yellow','yellow','green','green','green']})
>>> df
color item price
0 red apple 4.0
1 yellow banana 3.0
2 yellow orange 3.0
3 green banana 2.5
4 green orange 4.0
5 green apple 2.0
>>> df.groupby('item')
<pandas.core.groupby.DataFrameGroupBy object at 0x000000000E8EE240>
>>> g=df.groupby('item')
>>> g
<pandas.core.groupby.DataFrameGroupBy object at 0x000000000E76A828>
>>> g.groups
{'orange': Int64Index([2, 4], dtype='int64'), 'apple': Int64Index([0, 5], dtype='int64'), 'banana': Int64Index([1, 3], dtype='int64')}
>>> #分组
>>> g['price'].mean ()
item
apple 3.00
banana 2.75
orange 3.50
Name: price, dtype: float64
>>> m=g['price'].mean ()
>>> type(m)
<class 'pandas.core.series.Series'>
>>> df_mean=DataFrame(m)
>>> df_mean
price
item
apple 3.00
banana 2.75
orange 3.50
>>> pd.merge(df,df_mean,left_on='item',right_index=True)
color item price_x price_y
0 red apple 4.0 3.00
5 green apple 2.0 3.00
1 yellow banana 3.0 2.75
3 green banana 2.5 2.75
2 yellow orange 3.0 3.50
4 green orange 4.0 3.50
>>> #以多个属性进行分组
>>> df.groupby(['color','item']).sum()
price
color item
green apple 2.0
banana 2.5
orange 4.0
red apple 4.0
yellow banana 3.0
orange 3.0
>>> #最终变成了多重索引结构
pandas基础(3)_数据处理的更多相关文章
- pandas基础(2)_多重索引
1:多重索引的构造 >>> #下面显示构造pd.MultiIndex >>> df1=DataFrame(np.random.randint(0,150,size= ...
- 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍
一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...
- python学习_数据处理编程实例(二)
在上一节python学习_数据处理编程实例(二)的基础上数据发生了变化,文件中除了学生的成绩外,新增了学生姓名和出生年月的信息,因此将要成变成:分别根据姓名输出每个学生的无重复的前三个最好成绩和出生年 ...
- Pandas基础学习与Spark Python初探
摘要:pandas是一个强大的Python数据分析工具包,pandas的两个主要数据结构Series(一维)和DataFrame(二维)处理了金融,统计,社会中的绝大多数典型用例科学,以及许多工程领域 ...
- 利用Python进行数据分析(12) pandas基础: 数据合并
pandas 提供了三种主要方法可以对数据进行合并: pandas.merge()方法:数据库风格的合并: pandas.concat()方法:轴向连接,即沿着一条轴将多个对象堆叠到一起: 实例方法c ...
- 利用Python进行数据分析(9) pandas基础: 汇总统计和计算
pandas 对象拥有一些常用的数学和统计方法. 例如,sum() 方法,进行列小计: sum() 方法传入 axis=1 指定为横向汇总,即行小计: idxmax() 获取最大值对应的索 ...
- 利用Python进行数据分析(8) pandas基础: Series和DataFrame的基本操作
一.reindex() 方法:重新索引 针对 Series 重新索引指的是根据index参数重新进行排序. 如果传入的索引值在数据里不存在,则不会报错,而是添加缺失值的新行. 不想用缺失值,可以用 ...
- numpy&pandas基础
numpy基础 import numpy as np 定义array In [156]: np.ones(3) Out[156]: array([1., 1., 1.]) In [157]: np.o ...
- C#_02.16_基础七_.NET表达式&运算符
C#_02.16_基础七_.NET表达式&运算符 一.字面量: 字面量和变量的关系来理解字面量会比较简单: 因此字面量是源代码中键入已知的(我们知道它是多少的)值.也可以理解是等号右边的非创建 ...
随机推荐
- 【题解】[CF718C Sasha and Array]
[题解]CF718C Sasha and Array 对于我这种喜欢写结构体封装起来的选手这道题真是太对胃了\(hhh\) 一句话题解:直接开一颗线段树的矩阵然后暴力维护还要卡卡常数 我们来把\(2 ...
- 使用 Nginx 提升网站访问速度(转)
Nginx 简介 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Ig ...
- 特殊例子--JavaScript代码实现图片循环滚动效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- CentOS 7 设置自定义开机启动,添加自定义系统服务
详细文档,http://www.linuxidc.com/Linux/2015-04/115937.htm 摘自: http://www.centoscn.com/CentOS/config/2015 ...
- JAVA- 清除数组重复元素
清除数组重复元素并打印新数组. import java.util.*; public class Repeat { public static void main(String[] args) { / ...
- 修改ubuntu14.04命令行启动
方法1: 原来要想默认不进入xwindows,只需编辑文件”/etc/default/grub”, 把 GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash” 改成GRUB ...
- 【HDU2050】折线分割平面
Position Solution 2×n^2-n+1 证明见分割问题 Code // This file is made by YJinpeng,created by XuYike's black ...
- NOIP 2014【斗地主】
这真是道大火题. 因为保证数据随机,所以开始很多人直接用搜索 + 贪心水过去了,后来,为了遏制骗分这种不良风气的传播,各大 OJ 相继推出了斗地主加强版-- 正解: 先爆搜顺子,枚举打或不打,打多少张 ...
- linux命令学习笔记-eval命令详解
功能说明:重新运算求出参数的内容. 语 法:eval [参数] 补充说明:eval可读取一连串的参数,然后再依参数本身的特性来执行. 参 数:参数不限数目,彼此之间用分号分开. .eval命令将会首先 ...
- CF Round #459
好菜啊 第一场cf就菜成这样...mdzz 可能是我把题看的太简单了吧... T1AC T2AC T3WA T4看错题 T5不会写 T3想的是栈+暴力 正解: 对于一个pretty串的任意一个位置, ...