数据分析----pandas数据处理
1、删除重复元素[]
使用duplicated()函数检测重复的行,返回元素为布尔类型的Series对象,每个元素对应一行,如果该行不是第一次出现,则元素为True
使用drop_duplicates()函数删除重复的行
使用duplicate()函数查看重复的行
如果使用pd.concat([df1,df2],axis = 1)
生成新的DataFrame,新的df中columns相同,使用duplicate()和drop_duplicates()都会出问题
- 映射
映射的含义:创建一个映射关系列表,把values元素和一个特定的标签或者字符串绑定
包含三种操作:
- replace()函数:替换元素
- 最重要:map()函数:新建一列
- rename()函数:替换索引
1) replace()函数:替换元素
使用replace()函数,对values进行替换操作
Series替换操作
- 单值替换
- 普通替换
- 字典替换
- 多值替换
- 列表替换
- 字典替换(推荐)
Series参数说明:
- method:对指定的值使用相邻的值填充
- limit:设定填充次数
DataFrame替换操作
- 单值替换
- 普通替换
- 按列指定单值替换{列标签:替换值}
- 多值替换
- 列表替换
- 单字典替换(推荐)
注意:DataFrame中,无法使用method和limit参数
2) map()函数:新建一列
- map()可以映射新一列数据
- map()中可以使用lambd表达式
- map()中可以使用方法,可以是自定义的方法
注意: - map()中不能使用sum之类的函数,for循环
- map(字典) 字典的键要足以匹配所有的数据,否则出现NaN
3)transform()和map()类似
- transform()参数只能是函数,不能是字典
4) rename()函数:替换索引
仍然是新建一个字典
使用rename()函数替换行索引 - mapper替换所有索引
- index 替换行索引
- columns 替换列索引
- level 指定多维索引的维度
3. 使用聚合操作对数据异常值检测和过滤
使用describe()函数查看每一列的描述性统计量
使用std()函数可以求得DataFrame对象每一列的标准差,默认是求列
根据每一列或行的标准差,对DataFrame元素进行过滤。
借助any()或all()函数, 测试是否有True,有一个或以上返回True,反之返回False
对每一列应用筛选条件,去除标准差太大的数据
删除特定索引
df.drop(labels,inplace = True)
4. 排序
使用.take()函数排序
- take()函数接受一个索引列表,用数字表示
- eg:df.take([1,3,4,2,5])
可以借助np.random.permutation()函数随机排序
随机抽样
当DataFrame规模足够大时,直接使用np.random.randint()函数,就配合take()函数实现随机抽样
5. 数据分类处理【重点】
数据聚合是数据处理的最后一步,通常是要使每一个数组生成一个单一的数值。
数据分类处理:
- 分组:先把数据分为几组
用函数处理:为不同组的数据应用不同的函数以转换数据 合并:把不同组得到的结果合并起来
数据分类处理的核心:- groupby()函数
- groups属性查看分组情况
1 | df = DataFrame({'item':['苹果','香蕉','橘子','香蕉','橘子','苹果'], 'price':[4,3,3,2.5,4,2], 'color':['red','yellow','yellow','green','green','green'], 'weight':[12,20,50,30,20,44]}) |
根据item分组,查看结果
获取weight的总和
把总和跟df进行merge合并
使用列表进行多列分组,得到的结果是多层级索引
1 | 假设菜市场张大妈在卖菜,有以下属性: |
6.0 高级数据聚合
使用groupby分组后,也可以使用transform和apply提供自定义函数实现更多的运算
- df.groupby(‘item’)[‘price’].sum() <==> df.groupby(‘item’)[‘price’].apply(sum)
- transform和apply都会进行运算,在transform或者apply中传入函数名即可
- transform和apply也可以传入一个lambda表达式
注意 - transform 会自动匹配列索引返回值,不去重
- apply 会根据分组情况返回值,去重