pandas常用操作_桥豆麻袋XQXQXQ的博客-程序员资料

技术标签: pandas  python基础  python  数据分析  

python 数据分析学习笔记(二)

基于pandas的数据清洗和数据操作

1.处理丢失数据

丢失数据类型:
  • none
  • np.nan(NaN)
type(None) ##对象类型不可以参与运算
type(np.nan)  #浮点型数据可以参与计算

在pandas中如果遇到None形式的空值,则pandas会自动转化成Nan形式

处理空值的方法
  • isnull+any
  • notnull+all
data=DataFrame(data=np.random.randint(1,100,size=(7,5)))
data.iloc[2,3]=None
data.iloc[3,4]=np.nan
data.iloc[5,2]=np.nan
data.iloc[6,1]=None

返回数据

#isnull 结合any
#利用布尔索引,找到有空值的所有行
data.loc[data.isnull().any(axis=1)]
drop_index=data.loc[data.isnull().any(axis=1)].index
drop_index
#返回需要删除的行索引
Int64Index([2, 3, 5, 6], dtype='int64')
#删掉有空值的行
data.drop(labels=drop_index,axis=0)   
#notnull 结合all
data=data.loc[data.notnull().all(axis=1)] 
  • dropna
data.dropna(axis=0)
  • fullna
data.fillna(value=1)  #使用指定值填充空值 使用意义不大
#对空值进行赋值,使用ffill(从前一行或列)或者bfill(从后一行或列),axis确定行列
data.fillna(method='ffill',axis=1)  

2.级联

  • pd.concat
  • pd.append
import pandas as pd
import numpy as np
from pandas import DataFrame,Series

df1=DataFrame(data=np.random.randint(1,100,size=(5,3)),columns=['A','B','C'])
df2=DataFrame(data=np.random.randint(1,100,size=(5,3)),columns=['A','D','C'])
df=pd.concat((df1,df2),axis=0) #将df1与df2通过列进行连接
df=df1.append(df2)  # # 只能是列连接

返回:
在这里插入图片描述

3.合并

  • concat
  • merge (需要某一共同列进行合并) (重点)
df3=DataFrame({
    '成绩':['A','B','C'],'name':['张三','李四','王五']})
df4=DataFrame({
    '科目':['F','B','D'],'name':['张三','李四','王五']})
#根据姓名列进行两个表格的合并
#on不写的话,就使用两个表格中共有的列名进行合并(可以存在多个)
df=pd.merge(df3,df4,on='name')  #默认为内连接
df=pd.merge(df3,df4,on='name',how='left')  #左连接
#how的参数有outer(取并集),inner(取交集),left,right

当两个表格的列索引名称不同时,可以采用left_on=‘col1’,right_on='col2’来确定合并列

3.替换

** replace**
1.单值替换:
替换所有符合条件的元素,to_replace=‘替换前的值’,values=‘替换后的值’
按列指定单值替换:to_replace={col:‘替换前的值’},values=‘替换后的值’
2.多值替换:
列表替换:to_replace=[],values=[]
字典替换:to_replace={‘替换前的值1’:‘替换后的值1’,‘替换前的值2’,‘替换后的值2’}

4.映射操作

创建一个映射关系列表,把values元素和一个特定的标签或者字符串绑定(给一个元素提供不同的表现形式)

dic={
    'name':['张三','李四','王五'],
     'salary':[10000,20000,30000]}
data=DataFrame(data=dic)

在这里插入图片描述

dic={
    '张三':'tom',
    '李四':'join',
    '王五':'yangm'}
data['name2']=data['name'].map(dic)

map是Series的函数,只能由Series 调用
在这里插入图片描述

4.运算操作

  • apply (apply 用作dataframe中的计算工具)
    将某种运算作用到df的每一行或者列中
###给df中的每列元素加上100
df=DataFrame(data=np.random.randint(1,100,size=(5,3)))
def add_(values):
    return values+100
df.apply(add_,axis=0)
  • applymap (将某种运算作用到df的每一个元素中)
df.applymap(add_)#没有axis的概念

4.实现随机抽样

df=DataFrame(data=np.random.randint(1,100,size=(5,3)),columns=('A','B','C'))
#取确定的1,2,4行数据
df.take(indices=[1,2,4],axis=0)
#取前三行数据随机排序,再对前三列数据随机打乱
df.take(indices=np.random.permutation(3),axis=0).take(indices=np.random.permutation(3),axis=1)

5.数据的分组操作

  • groupby
  • groups
dic={
    '部门':['IT','人力','财务','IT','人力'],
    '姓名':['张三','李四','王五','陈六','丁一'],
    'salary':[30000,56000,7900,8000,9000]}
df=DataFrame(dic)

在这里插入图片描述

#根据部门分组
df.groupby(by='部门').groups
#分组聚合,sum(),mean()
df.groupby(by='部门').mean()  #会聚合所有能聚合的列,如果计算单一列,可做col限制
#agg用于将分组以后的结果做多种不同方式的聚合
df.groupby(by='部门')['salary'].agg(['min','max'])
#将计算的均值以新一列加入到原表中,可以使用映射
df['均值']=df['部门'].map(df.groupby(by='部门')['salary'].mean())

在这里插入图片描述
分组聚合的高级操作

def salary_new(s):
    return s*1.1
df['new_s']=df.groupby(by='姓名')['salary'].apply(salary_new)

在这里插入图片描述
使用apply或者transform作为自定义函数的运算工具.

6.读取数据库里的数据

从mysql数据库提取数据

import pymysql
conn=pymysql.connect(host='172......2',user='c.....o',passwd='l......c',db='t...t',charset='utf8')
sql=pd.read_sql('select * from test.group_detail_wq',conn)

7.pandas实现透视表和交叉表

透视表:pivot_table:主要参数为index,values,columns,aggfunc

#对老师和群状态做'群总发言量','群成员人数','群活跃人数'的数据汇总,计算求和
sql.pivot_table(index=['老师','群状态'],values=['群总发言量','群成员人数','群活跃人数'],aggfunc=sum)
#交叉表,计算每个老师在每个群状态下的群活跃人数的和,没有的补0
sql.pivot_table(index=['群状态'],values=['群活跃人数'],columns=['老师'],aggfunc=sum,fill_value=0)

交叉表:crosstab(index,columns)
pd.crosstab(index=sql[‘群状态’],columns=sql[‘老师’])

8.pandas实现DataFrame 分列

使用匿名函数lambda

#将col2列根据"-"分列,取第一列
df['col1']=df['col2'].map(lambda x:x.split("-")[0])
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44828521/article/details/118394058

智能推荐

解决 com.alibaba.fastjson.JSONException: illegal identifier : 问题_离散小维的博客-程序员资料_illegal identifier

问题还原:在js 中 使用var jsonArray=[];obj.test= $(item).attr("test");jsonArray.push(obj);jsonData=JSON.stringify(jsonArray);传入后端进行解析String jsonData = StringEscapeUtils.unescapeHtml(getRequest()....

关于win10打不开samba服务器共享文件夹问题分析_来自广东的驴的博客-程序员资料

在确保linux端samba配置ok, 而且win10可以ping同samba服务器主机ip时, 如果打开samba共享文件夹还是fail, 可以尝试执行如下操作1SMB1.0/CIFS协议默认被关闭了,之前的勒索病毒就是用的这个协议的漏洞,所以你去“启动和关闭windows功能”下手动勾选启用SMB1.0/CIFS协议2打开cmd, 管理员身份执行, 然后执行如下命令sc.exe co...

embedding后面一般会加一个dropout:_cc 提升ing 变优秀ing的博客-程序员资料_wordembedding中的dropout层

因为embedding的嵌入深度,每一个深度都相当于是一个特征,比如书写特征之类的,使用dropout放弃使用一些特征,使得一些本来对本模型无用的特征可以舍掉。另一方面,dropout最基本的作用,防止过拟合。...

中国银行业数字化转型研究报告 附下载_互联互通社区的博客-程序员资料

以在数据化、智能化为特征的数字化转型是银行业的一次产业革命。以支付功能的在线化为例,近年来移动支付领域的“脱媒”给银行上了生动的一课,即使是全国性的大型银行,面对互联网公司的“降维”竞争也是无能为力,区域性银行更是全面失守。这种数字化金融服务对银行业的传统理念和服务模式,乃至市场生态和竞争格局均形成无可规避的颠覆性冲击,银行要具备哪些核心能力,如何提高运营管理效率等,都成...

activity 与service 互相传值_14skyang的博客-程序员资料_activity向service传值

转自:activity 与service 互相传值activity中 向service传值与ativity互相传值类似在activity中Intent regIntent = new Intent(this, ChatService.class);regIntent.putExtra(“student_id”,student_id);startService(regIntent);然...

ubuntu16.04安装anaconda(python2.7 版本)_深夜虫鸣的博客-程序员资料

1.下载anaconda安装文件,官网速度较慢,建议清华开源软件镜像站下载: https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/ 2.用终端进入anaconda安装文件所在文件夹路径(cd xxx) 3. 在终端输入bash xxx(xxx为anaconda安装文件名 4. 不断按enter键是命令窗口显示的内容来到协议末尾,输入yes,然后

随便推点

机器学习之线性判别分析(LDA)详解(附多维红酒数据集的LDA降维代码实现)_Demo_xxx的博客-程序员资料_判别分析数据集

机器学习20_线性判别分析(LDA)详解(2021.07.07)一. 究极总结:投影后类内方差最小,类间方差最大。二. 知识理解LDA的思想非常朴素,给定训练样例集,设法将样例投影到一条直线上,使得同类样例的投影点尽可能接近、异类样例的投影点尽可能远离。在对新样本进行分类时,将其投影到同样的这条直线上,在根据投影点的位置来确定新样本的类别。如下图所示:在将所有的点通过降维的思想投影到直线上之后,实现了所谓的同类样例接近,异类样例远离的结果。如图中左边的理想情况,甚至可以找到一个法点以及它的法线

ios 中如何应对UIScrollView快速滑动(暴力用户,暴力测试)_SayKingLing的博客-程序员资料

1.实现UIScrollViewDelegate开始滑动:- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView滑动过程:- (void)scrollViewDidScroll:(UIScrollView *)scrollView滑动结束:- (void)scrollViewDidEn

构建云上企业数据库架构分为哪五步?_Winsdons的博客-程序员资料

阿里巴巴高级数据库架构师黄欢欢在2017云栖大会苏州峰会上与大家分享了云上企业数据库架构之路。主要分享了构建企业级数据库架构包括异地多活、数据库容器化、混合云架构、计算存储分离和数据库与离线混布,其中包含X-DB、HDM等重要云产品。以下是精彩视频内容整理:做数据库架构需要满足三个基本需求。第一个问题是扩展,业务高速发展,单地资源容量受限;第二个问题是弹性,双十一对弹性扩展和收缩的需求;第

git 如何同步本地、远程的分支和tag信息_I am Big Boss~~的博客-程序员资料_git 同步远程tag

git 如何在本地同步远程分支和tag1.git如何同步本地分支与远程origin的分支问题场景:同事A创建了本地分支branchA并push到了远程->同事B在本地拉取(git fetch)了和远程branchA同步的本地分支branchA->同事A开发完成将远程分支branchA删除(远程仓库已经不存在分支branchA)->同事B用git fetch同步远端分支,gi...

YApi Mock功能远程代码执行漏洞复现_yyyyzzzllll的博客-程序员资料

YApi Mock功能远程代码执行漏洞复现漏洞描述API接口管理平台是国内某旅行网站的大前端技术中心开源项目,使用mock数据/脚本作为中间交互层,为前端后台开发与测试人员提供更优雅的接口管理服务,该系统被国内较多知名互联网企业所采用。 YApi 是高效、易用、功能强大的 api 管理平台。但因为大量用户使用 YAPI的默认配置并允许从外部网络访问 YApi服务,导致攻击者注册用户后,即可通过 Mock功能远程执行任意代码。影响版本YApi7月7日前版本,即版本<=1.92(后文有说明)环境

leedcode题解-贪心_h_wzy的博客-程序员资料

1、分配饼干455. Assign Cookies (Easy)题目描述:每个孩子都有一个满足度,每个饼干都有一个大小,只有饼干的大小大于等于一个孩子的满足度,该孩子才会获得满足。求解最多可以获得满足的孩子数量。Input: [1,2], [1,2,3] Output: 2思路:对饼干大小、孩子的满足度排序,尽最大可能满足更多的孩子;class Solution {publ...

推荐文章

热门文章

相关标签