pandas之数据处理操作
1、pandas对缺失数据的处理
我们的数据缺失通常有两种情况:
1、一种就是空,None等,在pandas是NaN(和np.nan一样)
解决方法:
判断数据是否为NaN:pd.isnull(df),pd.notnull(df)
处理方式1:删除NaN所在的行列dropna (axis=0, how='any', inplace=False)
处理方式2:填充数据,t.fillna(t.mean()),t.fiallna(t.median()),t.fillna(0)
2、另一种是我们让其为0,蓝色框中
解决方法:
step1、处理为0的数据:t[t==0]=np.nan 当然并不是每次为0的数据都需要处理 计算平均值等情况,nan是不参与计算的,但是0会
step2、然后在对nan进行操作
注意:fiillna(t.mean())填充只针对该nan的列的平均值进行填充
2、常用的统计方法
df["name"].unique()#获取不重复的列表数据
df["name"].mean()#取平均值
df["name"].max()#取最大值
df["name"].min()#取最小值
df["name"].argmin()#取最小值位置
df["name"].argman()#取最大值位置
df["name"].median()#取中位数
3、pandas 实现one hot编码方式
1、重新构造一个全为0的数组,行名为分类,长度为原数据长度
zeros_df = pd.DataFrame(np.zeros((df.shape[0],len(cate_list))),columns=cate_list)
2、如果某一条数据中分类出现过,就让它由0变为1
方式1:
for cate in cate_list:
zeros_df[cate][df["title"].str.contains(cate)]=1

方式2:
for i in range(df.shape[0]):
zeros_df.loc[i][temp_list[i][0]] = 1
方式3:
cate_list = [i[0] for i in temp_list]
df["cate"] = pd.DataFrame(np.array(cate_list).reshape((df.shape[0],1)))
4、数据合并Join和Merge
Join :默认情况下它是把行索引相同的数据合并在一起
print '使用默认的左连接\r\n',data.join(data1) #这里可以看出自动屏蔽了data中没有的index=e 那一行的数据
print '使用右连接\r\n',data.join(data1,how="right") #这里出自动屏蔽了data1中没有index=c,d的那行数据;等价于data1.join(data)
print '使用内连接\r\n',data.join(data1,how='inner')
print '使用全外连接\r\n',data.join(data1,how='outer') Merge:按照指定的列把数据按照一定方式合并在一起
print "单个列名做为内链接的连接键\r\n",merge(data,data1,on="name",suffixes=('_a','_b'))
print "多列名做为内链接的连接键\r\n",merge(data,data2,on=("name","id"))
print '不指定on则以两个DataFrame的列名交集做为连接键\r\n',merge(data,data2) #这里使用了id与name #使用右边的DataFrame的行索引做为连接键
##设置行索引名称
indexed_data1=data1.set_index("name")
print "使用右边的DataFrame的行索引做为连接键\r\n",merge(data,indexed_data1,left_on='name',right_index=True)
print '左外连接\r\n',merge(data,data1,on="name",how="left",suffixes=('_a','_b'))
print '左外连接1\r\n',merge(data1,data,on="name",how="left")
print '右外连接\r\n',merge(data,data1,on="name",how="right")
data3=DataFrame([{"mid":0,"mname":'lxh','cs':10},{"mid":101,"mname":'xiao','cs':40},{"mid":102,"mname":'hua2','cs':50}]) #当左右两个DataFrame的列名不同,当又想做为连接键时可以使用left_on与right_on来指定连接键
print "使用left_on与right_on来指定列名字不同的连接键\r\n",merge(data,data3,left_on=["name","id"],right_on=["mname","mid"])
example :
# coding=utf-8
import numpy as np
import pandas as pd def merge():
"""
merge使用
:return:
"""
data1 = pd.DataFrame(np.arange(24).reshape(4,6),columns=list("abcdef"))
data2 = pd.DataFrame(np.arange(24).reshape(4,6),columns=list("avwxyz"))
data1.iloc[2,0] = 100
print(data1)
print(data2) #inner连接 ,选取两边都存在的值,即取交集
print(pd.merge(data1,data2,on=["a","a"])) # 右连接,以data2为主表,如果data1表中没有data2对应的数据,则置为NaN
print(pd.merge(data1,data2,on=["a","a"],how="right")) data1 = pd.DataFrame(np.arange(24).reshape(4,6),columns=list("abcdef"))
data2 = pd.DataFrame(np.arange(24).reshape(4,6),columns=list("qvwxyz"))
data1.iloc[2,0] = 100
print(data1)
print(data2) #如果两个表的列名称不对应,则使用left_on 与right_on一起使用,两个必须一起使用,反之,如果列名对应,则使用on
print(pd.merge(data1,data2,left_on=["a"],right_on=["q"])) #左表以"a"作为连接主键,右表以"q"连接 return None def join():
"""
join使用:行合并
如果存在相同的列名,则不能使用,只能使用merge
:return:
"""
data1 = pd.DataFrame(np.arange(24).reshape(4, 6), columns=list("abcdef"))
data2 = pd.DataFrame(np.arange(12).reshape(3, 4), columns=list("wxyz"))
data1.iloc[3,0]=100
print(data1)
print(data2)
print(data1.join(data2)) #直接将两个数据进行行添加
print(data1.join(data2,how="right")) #以右表为主连接表
print(data1.join(data2, how="left")) #以左表为主连接表
return None def concat():
"""
concat使用:全连接方式
:return:
"""
data1 = pd.DataFrame(np.arange(24).reshape(4, 6), columns=list("abcdef"))
data2 = pd.DataFrame(np.arange(12).reshape(3, 4), columns=list("wxyz"))
data1.iloc[3, 0] = 100
print(data1)
print(data2)
frame = [data1,data2]
print(pd.concat(frame)) #全连接 print(pd.concat(frame,keys=["h","i"])) #指定行索引 return None if __name__ == '__main__':
#merge()
#join()
concat()
5、分组与聚合
grouped = df.groupby(by="columns_name")
grouped是一个DataFrameGroupBy对象,是可迭代的
grouped中的每一个元素是一个元组,元组里面是(索引(分组的值),分组之后的DataFrame)
获取分组之后的某一部分数据:
df.groupby(by=["Country","State/Province"])["Country"].count()
对某几列数据进行分组:
df["Country"].groupby(by=[df["Country"],df["State/Province"]]).count()
分组方式(t1,t2结果一样):
t1 = df[["Country"]].groupby(by=[df["Country"],df["State/Province"]]).count()
t2 = df.groupby(by=["Country","State/Province"])[["Country"]].count()
DataFrameGroupBy对象方法:
6、索引与复合索引
a)简单的索引操作:
获取index:df.index
指定index :df.index = ['x','y']
重新设置index : df.reindex(list("abcedf"))
指定某一列作为index :df.set_index("Country",drop=False)
返回index的唯一值:df.set_index("Country").index.unique() b)Series复合索引


c)DataFrame复合索引

pandas之数据处理操作的更多相关文章
- pandas | 使用pandas进行数据处理——DataFrame篇
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是pandas数据处理专题的第二篇文章,我们一起来聊聊pandas当中最重要的数据结构--DataFrame. 上一篇文章当中我们介绍了 ...
- pandas的apply操作
pandas的apply操作类似于Scala的udf一样方便,假设存在如下dataframe: id_part pred pred_class v_id 0 d [0.722817, 0.650064 ...
- Pandas缺失数据处理
Pandas缺失数据处理 Pandas用np.nan代表缺失数据 reindex() 可以修改 索引,会返回一个数据的副本: df1 = df.reindex(index=dates[0:4], co ...
- Pandas的基础操作(一)——矩阵表的创建及其属性
Pandas的基础操作(一)——矩阵表的创建及其属性 (注:记得在文件开头导入import numpy as np以及import pandas as pd) import pandas as pd ...
- python数据结构:pandas(2)数据操作
一.Pandas的数据操作 0.DataFrame的数据结构 1.Series索引操作 (0)Series class Series(base.IndexOpsMixin, generic.NDFra ...
- Pandas的拼接操作
pandas的拼接操作 pandas的拼接分为两种: 级联:pd.concat, pd.append 合并:pd.merge, pd.join import pandas as pd import n ...
- (四)pandas的拼接操作
pandas的拼接操作 #重点 pandas的拼接分为两种: 级联:pd.concat, pd.append 合并:pd.merge, pd.join 0. 回顾numpy的级联 import num ...
- 数据分析05 /pandas的高级操作
数据分析05 /pandas的高级操作 目录 数据分析05 /pandas的高级操作 1. 替换操作 2. 映射操作 3. 运算工具 4. 映射索引 / 更改之前索引 5. 排序实现的随机抽样/打乱表 ...
- pandas 写csv 操作
pandas 写csv 操作 def show_history(self): df = pd.DataFrame() df['Time'] = pd.Series(self.time_hist) df ...
随机推荐
- Oracle笔记(七) 数据更新、事务处理、数据伪列
一.数据的更新操作 DML操作语法之中,除了查询之外还有数据的库的更新操作,数据的更新操作主要指的是:增加.修改.删除数据,但是考虑到emp表以后还要继续使用,所以下面先将emp表复制一份,输入如下指 ...
- yocto 编译C程序
1. 找到编译器位置所在(相关设置参考/opt/poky/1.7/environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi文件) poky安装在 ...
- Java编程思想第四版完整中文高清版.pdf
Java编程思想第四版完整中文高清版.pdf 链接: https://pan.baidu.com/s/1vV5BHF3L-bnaG6WGurdJ_A 提取码: vigy 复制这段内容后打开百度网盘手机 ...
- Spring Boot 中初始化资源的几种方式(转)
假设有这么一个需求,要求在项目启动过程中,完成线程池的初始化,加密证书加载等功能,你会怎么做?如果没想好答案,请接着往下看.今天介绍几种在Spring Boot中进行资源初始化的方式,帮助大家解决和回 ...
- [人物存档]【AI少女】【捏脸数据】活泼少女
AISChaF_20191028022750507.png
- [Python之路] 日志操作
使用logging模块来写日志 日志直接输出到准备输出 import logging logging.basicConfig(level=logging.WARNING, format="% ...
- mysql优化(上)
磁盘组成 和 磁盘读取过程 尽量减少 i/o 操作. 表结构设计:(1)三范式 : 原子性(不可拆分).唯一性(不能有完全相同的数据).无冗余性(不能有多余的数据),对于冗余性说明一下:拿订单 ...
- [winafl]这几天的折腾
1.自己写的exe 2.自己写的dll,然后写了接口程序去load...但是这个速度真是迷醉 先把基本的几种类型跑起来,再解决速度和样本的问题...
- delphi请求http接口中文乱码问题
请求http接口的时候参数值是中文乱码: http接口一般都是由java,php以及C#开发而成的,乱码的原因也是由于编码的问题,一般传递数据的都是utf8,然后传递的时候都会urlEcode 那么d ...
- 微信小程序简单的推送消息流程
1.进入开发设置-消息推送,启用消息推送 url: 启用并设置消息推送配置后,用户发给小程序的消息以及开发者需要的事件推送,都将被微信转发至该服务器地址中. 2.创建消息模板. 3.WXML代码: 4 ...
