首页 > 其他分享 >Numpy&Pandas:Pandas库(50%-100%)

Numpy&Pandas:Pandas库(50%-100%)

时间:2024-07-31 23:26:55浏览次数:10  
标签:输出 df 100% 50% Pandas stu clazz 缺失 age

目录

前言

一、排序

1.使用索引排序

2.使用变量值排序

二、计算新变量

1.新变量为常量

2.根据原变量新增列

3.基于一个原变量做函数运算

4.在指定位置插入新列

三、修改替换变量值

1.对应数值替换

2.指定范围替换

四、虚拟变量变换

五、数值变量分组

六、数据分组

七、分组汇总

八、数据合并

1.merge()

2.concat命令

九、处理缺失值

1.查看缺失值

2.判断是否有缺失值

3.填充缺失值

4.删除缺失值

十、数据去重

1.标识出重复的行

2.删除重复行

总结


前言

前两篇讲了pandas库的一半,

Numpy&Pandas:pandas库的安装,Pandas库(0-25%)-CSDN博客

Numpy&Pandas:Pandas库(25%-50%)-CSDN博客

今天这篇一口气将pandas库剩下的一半全讲完。

 

一、排序

1.使用索引排序

  • 多列索引时用level='' 选择使用什么索引进行排序
# 使用索引排序   多列索引时用level='' 选择使用什么索引进行排序
stu_df.sort_index(ascending = False)  # 按照默认索引排序 ascending控制升降序

输出:默认 ascending = False

 

2.使用变量值排序

# 使用变量值排序  
stu_df.sort_values(['age','id'],ascending=[False,True]).reset_index(drop = True) 
# 先根据age进行降序 再根据id进行升序    reset_index将索引还原 drop=True 会将原索引直接删除 

输出:

 

二、计算新变量

1.新变量为常量

stu_df['g'] = 100                 # 新变量为常数

输出:

 

2.根据原变量新增列

stu_df['gg'] = stu_df['age']*10   # 根据原变量新增列

输出:

 

3.基于一个原变量做函数运算

stu_df['22']=stu_df.apply(lambda x: x['age'] if x['age']==22 else 0 ,axis = 1) 
# axis=1 将每一行的元素传进apply函数进行操作
stu_df['22'] = stu_df.apply(lambda x: x['name'] if x['age'] == 22 and x['clazz'] == '文科六班' else 0 ,axis = 1)

输出:

 

4.在指定位置插入新列

stu_df.insert(1,'aaa',100)        # 在指定位置插入新列

输出:

 

三、修改替换变量值

1.对应数值替换

# 对应数值替换  先定位 再替换
stu_df.name[1] = 'tokyo'      # 在name列的第一个位置替换
stu_df['name'][2] = 'suda'
stu_df.loc[1,'age'] = 30       # 将行索引为1的行中的age列的值替换成30

stu_df

输出:先定位 再替换

 

2.指定范围替换

# 指定范围替换
stu_df.clazz[stu_df.clazz=='文科六班'] ='文六'  # 将clazz中的文科六班替换成文六
stu_df.age[stu_df.age==22] = 21                # 将age中的22替换成21

stu_df.replace(['男','女'],[1,0],inplace=True)  
stu_df.replace({'男':1,'女':0},inplace=True)     # 与上一行作用一样
# 将stu_df中所有包含'男'的值替换为1 所有包含'女'的值替换为 0
# inplace=True表示在原地修改

stu_df

输出:

 

四、虚拟变量变换

# 虚拟变量变换

pd.get_dummies(stu_df.gender) # 只有两个类别时

输出:

 

五、数值变量分组

# 数值变量分组
stu_df['qcut'] = pd.qcut(stu_df.id,q = 4)                 # 按数量分成四段
# stu_df.age.unique()   # 查看数据框某列有什么数值
# stu_df['qcut'] = pd.qcut(stu_df.age,q = 3,duplicates='drop')  
stu_df['cut'] = pd.cut(stu_df.age,bins = [20,21,23,24,30])   # 在bins里指定每段的左右界,默认左开右闭    
stu_df

输出:

 

六、数据分组

# 数据分组
stu_df.groupby('cut').groups  # 按照cut里的分段将数据框的索引进行分组
stu_df['clazz'] = stu_df.apply(lambda x:'文科六班' if x['clazz']=='文六' else x['clazz'] ,axis = 1) # 将clazz里的文六替换成文科六班
stu_df.groupby(['clazz','gender'])['age'].mean()  # 先按clazz分组 再在clazz里按gender分组 然后将每个组的年龄平均值打印出来

输出:分组之后输出的是Series数据类型

 

七、分组汇总

# 分组汇总
stu_df.groupby('clazz')['age'].agg(['mean','median'])   
# 按clazz分组 获取age的平均值 中位数  再用agg将其汇总

输出:

 

八、数据合并

left=pd.DataFrame({'key':['k0','k1','k2','k3'],'A':['A0','A1','A2','A3'],'B':['B0','B1','B2','B3'],})
right=pd.DataFrame({'key':['k0','k1','k2','k4'],'C':['C0','C1','C2','C3'],'D':['D0','D1','D2',

1.merge()

  • 内连接 只保留相同key的值
# inner left right
# 内连接 只保留相同key的值
# 外连接 left 以左边的df为基准 保留所有的左边的所有同列名的值
# 全连接 outer 全连接
pd.merge(left,right,how='inner')

输出:

 

  • 外连接 left 以左边的df为基准 保留所有的左边的所有同列名的值
  • right同理

 

  • 全连接 保留所有的key 
pd.merge(left,right,how='outer')  # 全连接 保留所有的key 

输出:

 

2.concat命令

  • 同时支持横向合并与纵向合并 
  • 默认 axis = 0 纵向合并 axis = 1 横向合并

 

九、处理缺失值

df=pd.DataFrame([[1,2,None],[4,np.nan,6],[5,6,7]])
df

1.查看缺失值

df.info()   # 查看缺失值  total 3 columns 每一行应该有三个数值 
            # 但 1 2 两行都只有梁非空值 所以 1 2 各有一个缺失值

输出:

 

2.判断是否有缺失值

df.isna()        # 判断是否为缺失值 True即为缺失值
df[df[1].isna()]   # 获取含有空值的单行的值
df.isna().any()    # 检查每一列是否有缺失值

输出:.any()方法默认检查列 可以使用参数axis = 1 检查每一行

 

3.填充缺失值

# ffill front  bfill back   axis默认为0 即垂直方向  axis=1 是水平方向

df.fillna(10)  # 用10 将缺失值填充
df.fillna(method='bfill')  # 用缺失值下面的值进行填充
df.fillna(method='bfill',axis = 1)  # 用缺失值右边的值进行填充
df.fillna(method='ffill')  # 用缺失值上面的值进行填充
df.fillna(method='ffill',axis = 1)  # 用缺失值左边的值进行填充

for i in df.columns:
    df[i]=df[i].fillna(np.nanmean(df[i]))    # 使用缺失值同一列数值的平均值进行填充 说明缺失值不参与计算
df

输出:输出的是最后一行代码 ,中间几种情况的输出建议各位用jupyter操作一下,有助于理解

 

4.删除缺失值

  • 一般不会删,而是进行填充
# 删除缺失值
df=pd.DataFrame([[1,2,np.nan],[4,np.nan,6],[5,6,7]])
print('默认为以行为单位剔除:')
df.dropna()
print('以列为单位剔除:')
df.dropna(axis='columns')

输出:

 

十、数据去重

1.标识出重复的行

# 标识出重复的行
# pd.set_option('display.max_rows', None)
# stu_df.duplicated(['name','gender'])

# 先用name和gender判断 相同为True 不同为False 再用bool取值
stu_df[stu_df.duplicated(['name','gender'])] 

输出:

 

2.删除重复行

# 删除重复行
stu_df.drop_duplicates(keep = 'first')  # keep = 'first' 删除重复行中的第一行
stu_df[~stu_df.duplicated(['name','gender'])]  # 利用查重标识结果直接删除

输出:数据总行数减少了4 ,所以有4行被删除。

 

总结

        Pandas库讲完了。刚好十条,十全十美,哈哈哈哈。

标签:输出,df,100%,50%,Pandas,stu,clazz,缺失,age
From: https://blog.csdn.net/weixin_65047977/article/details/140758499

相关文章

  • leetcode20.有效的括号、华为OD机试-(C卷,100分)- 表达式括号匹配
    leetcode20.有效的括号题目描述给定一个只包括‘(’,‘)’,‘{’,‘}’,‘[’,‘]’的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。示例1:输入:s=“()......
  • Contest7506 - 莫队 分块
    ContestA至少重复三次的数字莫队板子。B小明的习题集洛谷原题P1494[国家集训队]小Z的袜子。C棋子的颜色洛谷原题P1903[国家集训队]数颜色/维护队列。带修莫队:普通莫队是二维问题,现在加上一维时间轴,做法基本上同普通莫队。对询问\((l,r,t)\)排序时,第一关键......
  • QOJ6504 Flower‘s Land 2 题解
    QOJ6504Flower'sLand2题解题目链接:QOJ6504Flower'sLand2题意:给定一个只包含\(0,1,2\)的序列,\(T\)次询问,询问有两种:区间所有数加\(1\)然后模\(3\)求一段区间能否通过每次删掉相邻两个相同的数删完(如\(1,0,0,2,2,1\)就满足条件)题解:考虑用什么方法来维护区间......
  • VU13载板,2个FMC和3个FMC+接口,一个QSFP28(100G)光纤口,一个千兆网接口
    VU13载板,2个FMC和3个FMC+接口,一个QSFP28(100G)光纤口,一个千兆网接口,8GB内存。基于XILINXVirtexUltraScale+系列,芯片型号为XCVU13P-2FHGB2104I的一款高性能FMC+载板。该板卡集成了3个FMC+(Vita57.4)和2个FMC(Vita57.1)连接器。可以与各种FMC子卡进行完美匹配,为用户提供了功能齐......
  • umi——设置proxy代理后,请求status一直为500
    参考:umi.jsproxy设置https请求不验证证书--解决SELF_SIGNED_CERT_IN_CHAIN https://blog.csdn.net/u010974701/article/details/86940422 我的情况umi项目,设置proxy代理后,请求status一直为500.umirc.ts:proxy:{'/api':{target:'https://xxx',//服务端域......
  • nacos配置&gateway配置服务发现一直报500
    项目场景:这两天不是一直在搞简化配置、使用公共配置、我的服务可以通过网关访问这几个任务嘛,也是不断地踩坑补知识才总算把这几个任务都搞好了,下面就是记录过程中遇到的问题。使用公共配置因为发现项目使用的配置文件过多,有application、application-test.yml、bootstrap.ym......
  • Python捕获一组中的1000个项目进行处理
    我有一个包含数千条记录的大表(可能有3,000到75,000条记录),我将所有数字ID放入排序列表中。我想一次有序地处理一组1000个ID。我如何优雅地获取前1000个和“标签”,设置为“223344到337788”(字典在这里有意义吗,或者只是列表捕获中的第一个/最后一个项目......以跟......
  • 海信IP105H 47TG0/50TG0_湖北电信高安版_S905L3B_当贝桌面线刷固件包
    海信IP105H47TG0/50TG0_湖北电信高安版_S905L3B_当贝桌面线刷固件包  线刷方法:(新手参考借鉴一下)1、准备好一根双公头USB线刷刷机线,长度30-50CM长度最佳,同时准备一台电脑,拆开盒子;2、电脑上安装好刷机工具AmlogicUSBBurningTool软件→打开软件→文件→导入烧录包......
  • P3501 [POI2010] ANT-Antisymmetry 反对称 题解(字符串哈希+二分)
    原题题意若一个由010101组成的字符串将000和......
  • 姜戈 Nginx 502
    正在寻找如何使用ElasticBeanstalk与Django修复nginx502BadGateway的解决方案。Django应用程序是正确的,本地一切都可以无缝运行。当我尝试将该应用程序部署到AWSEC2时出现问题。我使用AWSPostgreSQL数据库。所有环境变量都正确保存在AWS环境......