数据框的合并排序、描述统计、分箱

一、表合并

二、数据框排序

三、描述性统计

四、变量与索引的相互转化

五、分箱

六、分类变量转虚拟变量

七、数据框对象的复制

八、字符串变量的常用方法

九、删除重复项

十、数据抽样

一、表合并

1、纵向合并
# 导入库
import pandas as pd
import numpy as np
#建立两个表
data1=pd.DataFrame(np.random.rand(4,3),columns=['x1','x2','x3'])
data2=pd.DataFrame(np.random.rand(4,3),columns=['x2','x3','x4'])
# append 纵向合并
data1.append(data2,ignore_index=True)
# ignore_index=True  表示忽略本来的索引,合并后生成新的索引,默认False,按原有索引
# 如果data1和data2的index值有重复的话就会提示出错。verify_integrity参数的默认值为False# pd.concat 纵向合并
pd.concat([data1,data2],axis=0,ignore_index=True) #合并的两个表要放在一个列表中
2、横向合并
# 建两个表
data1=pd.DataFrame(np.random.rand(4,3),columns=["x1","x2","x3"])
data2=pd.DataFrame(np.random.rand(4,3),columns=["x4","x5","x6"],index=(range(1,5))) pd.concat([data1,data2],axis=1,join='inner')
#加上join参数的设定,如果为’inner’表示两表的交集,如果是outer(默认)表示两表的并集
#横向合并:pd.merge方法
# 导入三表
individual1=pd.read_excel("D:\\CDA数分学习资料\\python\\数据清洗\\pandas\\individual1.xlsx")
individual2=pd.read_excel("D:\\CDA数分学习资料\\python\\数据清洗\\pandas\\individual2.xlsx")
family=pd.read_excel("D:\\CDA数分学习资料\\python\\数据清洗\\pandas\\family.xlsx") # 补齐pid列
# 方法1
individual1['pid']=individual1['pid'].astype(str).map(lambda x:x.zfill(7)) # zfill 零填充
#方法2
def f1(x):return '0'*(7-len(str(x)))+str(x)
individual1['pid']=individual1['pid'].map(f1)
individual2['pid']=individual2['pid'].map(f1)
# 一表和一表合并
data1=pd.merge(individual1,individual2,left_on='pid',right_on='pid',how='outer',suffixes=('_1','_2'))
# 处理重复列
data1['fid_1'].fillna(data1['fid_2'],inplace=True)     # 将fid_2的值赋值给fid_1
data1.drop(columns=['fid_2'],errors='ignore',axis=1,inplace=True)  # 删除 fid_2
data1.rename(columns={"fid_1":"fid"},inplace=True)   # fid_1重命名为fid
data1['年龄_2'].fillna(data1['年龄_1'],inplace=True)
data1.drop(columns=['年龄_1'],errors='ignore',axis=1,inplace=True)
data1.rename(columns={"年龄_2":"年龄"},inplace=True)#多表和一表合并,表的前后位置不影响结果
data2=pd.merge(data1,family,left_on='fid',right_on='fid',how='outer')
data2.to_excel("整理好后的数据.xlsx",index=False)  # 导出表格

参数how表示连接方式,有四个可能取值’left’, ‘right’, ‘outer’, ‘inner’, 默认的取值是 ‘inner’。 left_on是设定左表的连 接变量,right_on是设定右表的连接变量。 suffixes是设定重复列的变量名后缀,以便知道重复列来自哪张表

二、数据框排序

data1=pd.DataFrame(np.random.rand(4,3),columns=['x1','x2','x3'],index=np.arange(4)[::-1])
# 数据框实例的sort_values方法
data1.sort_values(by="x1",ascending=True)  # 按x1列升序排序
data1.sort_values(by=['x1','x2'],ascending=[True,False]) #先按x1升序,再按x2降序,经常x2没用#需要知道的是ascending=True是升序,ascending=False是降序。 #inplace 参数的默认取值是False,如果设定为True,则会直接作用于原数据框实例。#数据框实例的sort_index方法
data1.sort_index(ascending=True,inplace=True)

三、描述性统计

data1.describe()  #如果括号内不设定任何参数,则会对所有数值类型的变量进行描述统计。
data1.describe(exclude=['object'],percentiles=[0.1,0.2])
#通过include参数可以选择对哪些类型的变量进行描述统计。
#通过exclude参数可以选择不对哪些类型的变量进行描述统计。
#percentiles参数可以设定报告哪些分位数,默认是[.25, .5, .75] data1.describe(exclude=["object"],percentiles=[0.1,0.2])
#中位数是不用设定也会报的。
# 变量的值统计
data1['地域编码'].value_counts()   # 默认计算频数并降序排序
data1["年龄"].groupby(data1['性别']).max()  #按性别分组后求年龄最大值
#除了max还有min,mean,median,sum,quantile,var,std,skew等
data1["年龄"].groupby(data1["性别"]).describe() #分组多个描述统计
# 聚合方法 agg() 指定描述统计
data1[['年龄','受教育程度']].groupby(data1['性别']).agg(['mean','max','min'])
data1["年龄"].groupby(data1["性别"]).agg([lambda x:np.quantile(x,0.1)])  #可放入自定义匿名函数# 分组对象的transform方法
data1['年龄'].groupby([data1['性别']]).transform(np.mean)
data1["年龄"].groupby([data1["性别"]]).transform(lambda x:x.count())
# transform 也可以放入自定义匿名函数lambda
#和agg方法的区别在于transform方法返回的对象的长度和原数据框的行数相等。而且索引和原数据框或者序列的索引保持一致。行数相同这样就可以做合并做缺失值处理。
# 数据透视表
data1.pivot_table(values=["年龄","受教育程度"],index=["地域编码","性别"],                        aggfunc={"年龄":[np.mean,np.max],"受教育程度":np.mean})     # aggfunc 可以对某列做单独的统计

四、变量与索引的相互转化

# 列变成索引
data1.set_index(['pid'],drop=False)  #将pid列设为索引,drop参数False表示保留pid原有列,反之删除
#  inplace参数,默认值为False #索引变列
temp.reset_index()  # 将temp中索引转换成列
temp.reset_index().reset_index()    # 新增索引,原有索引变成列

五、分箱

# cut 分箱  缺点不能保证每个组分的均匀
pd.cut(data1["年龄"],3)  #cut 自动生成了大概3个等距的离散区间
data1["年龄段"]=pd.cut(data1.年龄, [0,45, 59, 74, 89,120],          # 指定划分区域并添加标签labels=["青年", "中年", "老年前期","老年","长寿老人"]) # pd.qcut 用分位数分箱   均匀分布
pd.qcut(data1['年龄'],4,labels=[1,2,3,4])    #均匀分成4个区间

六、分类变量转虚拟变量

pd.get_dummies(data1["性别"],prefix="性别")
# 如果写上参数drop_first=True,删除第一个虚拟变量,也就是会删除‘性别_女’列
pd.concat([data1,pd.get_dummies(data1['性别'],prefix='性别')],axis=1)
# 横向合并data1和新增的性别两列

七、数据框对象的复制

#浅复制,一个改变,另一个也会改变。
data2=data1 #深复制,单独改变一方,另一方不受影响
data3=data1.copy(deep=True)

八、字符串变量的常用方法

data1.fid.str.len()  #计算字符串的长度
data1.fid.str.replace("f","a") #对字符串变量进行查找替换
data1.fid.str.count("0")   #计算字符串出现次数
data1.pid.astype(str).str.zfill(5) #填补字符串
#想查看更多函数,请运行下面的命令
print(dir(data1.fid.str)) series1=pd.Series(["河北省衡水市","河北省石家庄市","河南省郑州市"])
#正则表达式匹配。
series1.str.extract(r"(.+省)")   # 将--省提出来

九、删除重复项

# duplicated()判断是否是重复的项
data1.duplicated()   # 第一次出现False,第二次出现就是True,返回布尔值
data1.drop_duplicates(subset=['数学','英语'],keep='first')  # 判断‘数学’‘英语’两列有没有重复值
# 参数keep 默认是first,表示保留第一次出现的,这个方法有inplace参数。

十、数据抽样

data2.sample(frac=0.1)   #设定抽取样本比例为10%。
#参数replace=False表示无放回抽样。
#参数random_state是设定随机种子,保证每次运行代码抽取到的样本一样

判断‘数学’‘英语’两列有没有重复值

参数keep 默认是first,表示保留第一次出现的,这个方法有inplace参数。


#### 十、数据抽样```python
data2.sample(frac=0.1)   #设定抽取样本比例为10%。
#参数replace=False表示无放回抽样。
#参数random_state是设定随机种子,保证每次运行代码抽取到的样本一样

数据框的合并排序、描述统计、分箱相关推荐

  1. pandas数据预处理(标准化归一化、离散化/分箱/分桶、分类数据处理、时间类型数据处理、样本类别分布不均衡数据处理、数据抽样)

    1. 数值型数据的处理 1.1 标准化&归一化 数据标准化是一个常用的数据预处理操作,目的是处理不同规模和量纲的数据,使其缩放到相同的数据区间和范围,以减少规模.特征.分布差异等对模型的影响. ...

  2. R中大数据量数据框的合并慎重使用rbind

    最近在用R处理百万级的数据,程序本身是线性扫描,可是随着数据量的增加,运行时间却不是线性增加,一度几天都运行不完. 怀疑是其中rbind函数造成的,查询到这篇文章,也说了这个问题 http://blo ...

  3. 《Python金融大数据风控建模实战》 第6章 变量分箱方法

    <Python金融大数据风控建模实战> 第6章 变量分箱方法 本章引言 Python代码实现及注释 本章引言 变量分箱是一种特征工程方法,意在增强变量的可解释性与预测能力.变量分箱方法主要 ...

  4. 转:Python数据分箱,计算woe,iv

    转自:https://zhuanlan.zhihu.com/p/38440477 https://www.cnblogs.com/wzdLY/p/9853209.html https://github ...

  5. 合并相同数据的行_R语言笔记(六):数据框重塑(reshape2)

    数据处理主要内容包括: 1. 特殊值处理 1.1 缺失值 1.2 离群值 1.3 日期 2. 数据转换(base vs. dplyr) 2.1 筛选(subset vs. filter/select/ ...

  6. mysql内数据离散化,R语言数据预处理操作——离散化(分箱)

    一.项目环境 开发工具:RStudio R:3.5.2 相关包:infotheo,discretization,smbinning,dplyr,sqldf 二.导入数据 # 这里我们使用的是鸢尾花数据 ...

  7. R语言数据预处理——离散化(分箱)

    R语言数据预处理--离散化(分箱) 一.项目环境 开发工具:RStudio R:3.5.2 相关包:infotheo,discretization,smbinning,dplyr,sqldf 二.导入 ...

  8. 数据分箱——KS分箱/卡放分箱

    目录 1.前言 2.定义 3.分箱的用处 4.分箱方法 4.1 KS分箱 变量的KS值 Best-KS分箱 4.2卡方分箱 1.前言 评分卡建模在金融行业应用得比较广泛,比如对客户的信贷诚信度进行评分 ...

  9. SPSS教程——分箱功能将连续数据离散化

    "分箱法"相信学过统计学的小伙伴们都不会陌生,它的主要作用就在于对噪音数据进行剔除,同时将连续型数据进行离散处理.在模型分析开始前,我们经常需要使用到分箱法来处理和清洗数据. 作为 ...

  10. python合并两个数据框_python 学习的第五天 数据框合并

    1.根据共有的特性进行合并 import pandas; from pandas import read_csv; items = read_csv( "D://PA//4.12//data ...

最新文章

  1. Spring MVC 基础注解之@RequestMapping、@Controller、(二)
  2. VTK:可视化算法之ColorIsosurface
  3. vue-cli 脚手架搭建
  4. 解决四个字节的字符无法存入数据库
  5. python控制步进电机驱动器_树莓派操作案例1-使用python GPIO+TB6612驱动步进电机
  6. mysql 设置utf8mb4_mysql配置utf8_mb4
  7. 解决Ubuntun 12.04编译 WARNING: 'automake1.12' is missing on your system
  8. 获取table控件的某行某列
  9. php如何实现自动加载mp3,如何简单的实现php自动加载
  10. 2015-数学(3)
  11. 织梦留言板模板 .php,织梦DEDECMS留言板功能制作及调用标签
  12. Flink 滑动窗口优化
  13. 电脑连接宽带,给手机开热点
  14. 编程java好学吗,编程好学吗?零基础学多久能入门?
  15. Java 线程的状态
  16. 通信原理仿真100例 | 多普勒频移的matlab仿真
  17. IOS下载资源zip到本地然后读取
  18. 这是我们公司总结的一些关于中文乱码问题的一些解决方案和经验和大家分享
  19. 苹果4s什么时候上市的_每天吃苹果有哪些好处?什么时候吃苹果最好?
  20. 计算机无法加入域请确保域名,计算机无法加入域的终级解决方法

热门文章

  1. Javascript实现完美继承
  2. 从零开始构建MSBuild C#项目文件
  3. LVS+KeepAlived,RabbitMQ高可用负载均衡
  4. linux ssh证书登录
  5. 易语言-MD5加密16位和32位方法
  6. 广播接收者的特点和版本差异
  7. 减少文件间的编译依赖
  8. Spatial Pyramid 小结
  9. c++构造函数、析构函数为什么不能取地址
  10. linux模拟进程调度,Linux进程调度模拟3