数据预处理-数据清洗之pandas库的简单使用

2023-05-16

创建一个series

#导入包
import numpy as np

import pandas as pd

'''
创建series
'''
#通过数组创建一个series
np.random.seed(1234)
arr1=np.random.randint(1,10,5)
print(arr1)
ser1=pd.Series(arr1,index=['a','b','c','d','e'])
print(ser1)#index 指定索引,不指定则默认0 1 2 3 ...

#通过字典创建一个series
dict1={"a":1,"b":2,"c":3}
print(dict1)
ser2=pd.Series(dict1)
print(ser2)


#通过标量生成一个series
ser3=pd.Series(3,index=['a','b','c'])
print(ser3)
#一种类似广播的形式


'''
series常用属性
'''

#index
print(ser1.index)
#name
ser4=pd.Series(arr1,index=['a','b','c','d','e'],name='data')
print(ser4)
ser4.rename('haha',inplace=True)
#默认不在原数据更改,把inplace改成True就可以在原数据更改
print(ser4)

'''
series的特性
'''
#数组特性
#可以索引和切片,numpy有的操作pandas都可以
print(ser1)
print(ser1[0])
print(ser1[1:4])#切片不会得到最后一个元素
print(ser1[[1,3,4]])
print(ser1>6)
print(ser1[ser1>6])
#可以用一些numpy的函数
print(np.exp(ser1))

#字典特性
#可以通过索引标签获取和设置值
print(ser1['c'])
print(ser1['c':'e'])#标签可以获得最后一个元素
print(ser1[['a','c','d']])
ser1['a']=0#修改series的元素值
print(ser1)
print(ser1.get('b','找不着'))#默认找不到会返回None,可以手动设置

#矢量化和标签对齐
ser5=pd.Series([1,2,3,4,5],['a','b','c','d','e'])
print(ser1+ser5)
#基于标签对齐进行矢量化运算
ser6=pd.Series([1,2,3,4,5],['a','b','k','d','n'])
print(ser1+ser6)

创建一个DataFrame

#导入
import pandas as pd
import numpy as np

'''
创建DataFrame
pd.DataFrame(data=None,index=None,columns=None,dtype=None,copy=False)
'''
#通过数组创建DataFrame
np.random.seed(1234)
arr=np.random.randint(1,100,(3,7))
print(arr)
df=pd.DataFrame(arr,index=['a','b','c'],columns=['A','B','C','D','E','F','G'])
print(df)
#通过字典创建DataFrame
dict1={'员工姓名':['张三','李四','王五'],'销售业绩':[20000,30000,50000],'提成':[4000,6000,10000]}
df1=pd.DataFrame(dict1)
print(df1)
dict2={'员工姓名':pd.Series(['张三','李四','王五']),'销售业绩':pd.Series([20000,30000]),'提成':pd.Series([4000,6000,10000])}
df2=pd.DataFrame(dict2) #index写在上面的Series中
print(df2)

'''
DataFrame的列操作
'''

#增加列
df2['基本工资']=2500 #通过一个标量增加一整列
print(df2)
df2['创造收益']=df2['销售业绩']-df2['提成']-df2['基本工资'] #通过其他列运算增加一列
print(df2)
df2['是否达标']=df2['创造收益']>20000
print(df2)
df2['性别']=pd.Series(['女','男'],index=[0,2])
print(df2)
#insert 插入列

df2.insert(6,'年龄',[25,27,30])
print(df2)


#删除列
df2.pop('年龄')
print(df2)

del df2['性别']
print(df2)
#pop 和 del 直接在原数据上修改

df2.drop(columns=['是否达标']) #index删行,columns删列,默认是不在原数据更改. inplace=False
print(df2)

df2.drop(index=[0,1],inplace=True)
print(df2)

DataFrame的索引

#导入包
import pandas as pd
import numpy as np
'''
DataFrame的索引
'''
np.random.seed(1234)

dict2={'员工姓名':pd.Series(['张三','李四','王五']),'销售业绩':pd.Series([20000,30000]),'提成':pd.Series([4000,6000,10000])}
df2=pd.DataFrame(dict2) #index写在上面的Series中
print(df2)
df2['基本工资']=2500 #通过一个标量增加一整列
print(df2)
df2['创造收益']=df2['销售业绩']-df2['提成']-df2['基本工资'] #通过其他列运算增加一列
print(df2)
df2['是否达标']=df2['创造收益']>20000
print(df2)
df2['性别']=pd.Series(['女','男'],index=[0,2])
print(df2)
#insert 插入列

df2.insert(6,'年龄',[25,27,30])
print(df2)


#基于标签的索引(常用)
#df.loc[行索引信息,列索引信息] 
#如果只索引行信息,所有列信息都保留,索引语法中的索引列信息可以忽略
#如果只索引列信息,所有行信息都保留,索引语法中的索引行信息不可省略,写冒号加逗号表示行都保留
print(df2.loc[1])
print(df2.loc[1,"员工姓名":"创造收益"])
print(df2.loc[1:2])
df2.loc[3]=['小明',60000,12000,2500,np.nan,False,24,'男'] #增加一行
print(df2)

print(df2.loc[[0,1,3]])

print(df2.loc[:,['员工姓名','是否达标']])

#基于位置的索引
#df.iloc[行索引,列索引]
#如果只索引行信息,所有列信息都保留,索引语法中的索引列信息可以忽略
#如果只索引列信息,所有行信息都保留,索引语法中的索引行信息不可省略,写冒号加逗号表示行都保留

print(df2.iloc[1])
print(df2.iloc[1,[0,2]])

#布尔索引
print(df2[(df2.提成>=10000) | (df2.年龄<30)])


DataFrame的相关操作

#
import pandas as pd
import numpy as np

'''
DataFrame的相关操作
'''
'''
df.shape #查看数据框的形状
df.head(2) #查看数据框的前几行,默认前5行
df.tail(3) #查看数据框的结尾几行,默认后5行
df.index #查看行索引
df.columns #查看列索引
#查看数据框的详细信息
df.info()
#进行简单的描述统计
df.describe()
df.sort_index() #升序排序
df.sort_index(ascending=False) #降序排序
df.sort_values("销售业绩") #默认升序排序
df["工龄"] = [1,3,7,5,6,4,2]
df.sort_values(["销售业绩","工龄"]) #默认升序排序
df.sort_values(["销售业绩","工龄"],ascending=False) #降序排序
df.sort_values(["销售业绩","工龄"],ascending=[False,True]) #降序排序
'''



#创建数据
dict2={'员工姓名':pd.Series(['张三','李四','王五','瓜六']),'销售业绩':pd.Series([20000,30000,np.nan,20000]),'提成':pd.Series([4000,6000,10000,4000])}
df2=pd.DataFrame(dict2) #index写在上面的Series中
df2['基本工资']=2500 #通过一个标量增加一整列
df2['创造收益']=df2['销售业绩']-df2['提成']-df2['基本工资'] #通过其他列运算增加一列
df2['是否达标']=df2['创造收益']>20000
df2['性别']=pd.Series(['女','男','男'],index=[0,2,3])
#insert 插入列
df2.insert(6,'年龄',[25,27,30,27])
print(df2)
#缺失值处理
#1.查看缺失值
#df.isnull() 缺失值为True,非缺失值为False
print(df2.isnull())
#df.isnull().sum() True 1 False 0 可以用sum()统计数量
print(df2.isnull().sum())
#注意:查看比例
#两种方法,mean() sum()/shape[0]
print(df2.isnull().mean())
print(df2.isnull().sum()/df2.shape[0])
#查看一列的不同值数量
print(df2.性别.value_counts())
#2.处理缺失值
#(1)填充 
#fillna
#数值填充
print(df2.性别.fillna('男'))  #对单列填充
print(df2.fillna(df2.mean())) #使用均值填充
#函数方法填充
print(df2.fillna(method='ffill')) #向前填充
print(df2.fillna(method='bfill',limit=1)) #向后填充,用limit控制填充次数
#replace
#数值填充
print(df2.replace(np.nan,0)) #查找的值,要填充的值
print(df2.replace(np.nan,df2.median())) #用中位数填充
#函数方法填充
print(df2.replace(method='ffill')) #使用方法和fillna基本一致
#(2)删除
print(df2.dropna()) #默认的axis=0 即把有缺失值的行全删掉,可以更改为axis=1 对列进行操作
print(df2.dropna(axis=1))

'''
数据表合并
pd.concat()
pd.merge()
'''
#假设有两个表
df_1=df2.iloc[:2]
df_2=df2.iloc[2:]
print(df_1)
print(df_2)
#pd.concat()擅长上下拼接
print(pd.concat([df_1,df_2],keys=['df_1','df_2'])) #直接拼接
#创建两个部门的表,不同部门提供的表中的人可能重复
df_s=df2.iloc[:,0:4]
df_p=df2.iloc[:,[0,4,5,6,7]]
print(df_s)
print(df_p)
print(pd.concat([df_s,df_p],axis=1,keys=['df_s','df_p'],names=['来源','索引'])) #keys可以显示数据来自哪个表
#pd.merge()擅长左右拼接
print(pd.merge(df_s,df_p,on='员工姓名')) #不写on也可以拼接,默认找相同列拼接。
#如果没有相同列名
#可以采用 pd.merge(left,right,left_on='',right_on='')

'''
分组运算
df.groupby()
'''
gp1=df2.groupby('性别')
print(len(gp1)) #分类数
print(gp1.size()) #查看分组数据
print(gp1.mean())
print(gp1['销售业绩'].mean()) #可对单列操作
gp2=df2.groupby(['性别','是否达标'],as_index='False') #as_index 设置是否作为索引
print(gp2.size())
#agg()
print(gp1['销售业绩'].agg([np.mean,np.std]).rename(columns={'mean':"平均",'std':'标准差'})) #改个名字
print(gp1.agg({'销售业绩':np.mean,'提成':np.std})) #agg可以使用字典赋值,实现对不同列不同聚合方法
'''
数据透视表
pd.pivot_table()
'''
print(pd.pivot_table(df2,values='创造收益',index='员工姓名',columns='年龄')) #默认聚合为mean
print(pd.pivot_table(df2,values='创造收益',index='员工姓名',columns='年龄',aggfunc=np.sum)) #改成求和
print(pd.pivot_table(df2,values=['创造收益','销售业绩'],index=['员工姓名','性别'],columns=['年龄','是否达标'],aggfunc=[np.sum,np.mean]))

'''
数据的读入和导出
pd.read_csv()
pd.read_excel()
df.to_csv()
df.to_excel()
'''
#读取.csv .txt 都使用pd.read_csv()
df_test=pd.read_csv('D:/TestFile/from.txt',sep=',') #如果在同目录下写文件名,不然写路径 sep指定分隔符,默认',' 
print(df_test)
df_test1=pd.read_excel('D:/code/python/销售数据.xlsx',sheet_name=0) #sheet_name 指定工作表 
print(df_test1)
df2.to_csv('D:/code/python/测试数据.csv',encoding='utf-8')
df2.to_csv('D:/code/python/测试数据.txt',encoding='utf-8')
df2.to_excel('D:/code/python/测试数据.xlsx',encoding='utf-8',sheet_name='员工表')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据预处理-数据清洗之pandas库的简单使用 的相关文章

  • VScode 占用cpu风扇狂转, C/C++ IntelliSense Server for Visual Studio Code cpptools.exe占用cpu 30%

    点击下面那个红框中的东西 xff0c 然后选择暂停分析 cpu占用立马降下来了
  • 学习C++中遇到的各种问题

    拷贝构造函数到底是个是什么东西 xff1f 到底什么时候用const xff1f amp 是写在前还是写在后 xff1f 有区别 xff1f 为什么在析构函数中加了delete程序就会卡死 xff1f size t是个什么东西 xff1f
  • 【3D目标检测】稀疏卷积

    稀疏卷积实现部分 先说说实现部分 xff0c 对原理感兴趣的往后看 1 稀疏数据生成 这里的思路主要是先利用np meshgrid和np stack创建出稀疏数据补全后shape大小的点云坐标 xff0c 然后随机取前num points个
  • Unity3D之物体跟随鼠标移动和旋转

    void FixedUpdate if Input GetMouseButton 0 Vector3 aimPos 61 Camera main ScreenToWorldPoint new Vector3 Input mousePosit
  • 【寒武纪】视觉算法MLU220硬件适配(1)

    1 xff0c 环境搭建 xff1a MLU220快速上手指南 寒武纪开发者社区 安装硬件驱动和软件工具链 xff0c 也可以直接使用寒武纪官方开发平台 xff1a 寒武纪开发平台 本地开发安装完工具需要进行一些配置 xff1a 安装后配置
  • 【自动驾驶】second模型训练

    1 xff0c 数据组织 xff1a 训练验证数据生成 xff1a python create data py nuscenes data prep data path 61 NUSCENES TRAINVAL DATASET ROOT v
  • OpenMP入门

    OpenMP 是 Open MultiProcessing 的缩写 可以在 Visual Studio 或者 gcc 中使用 Hello World 把下面的代码保存为 omp cc include lt iostream gt inclu
  • 【蒸馏】PointDistiller: Structured Knowledge DistillationTowards Efficient and Compact 3D Detection

    简述 方法的细节 fT和f S 教师检测器和学生检测器中的特征编码层 AT和AS 抽取的待蒸馏体素或重要性得分最高的点的特征 CT和CS 教师和学生检测特征的通道数 GT和GS 教师和学生检测器的图形特征 该方法基于预先定义的重要度评分 x
  • 【自动驾驶】多传感器感知技术解析

    1 传感器 自动驾驶中的传感器主要用到激光雷达 xff0c 毫米波雷达 xff0c 摄像头 xff0c 超声波 xff0c 优缺点如下 xff1a 1 xff09 激光雷达的测距精度 测距范围及对温度和光照的适应性很强 xff0c 缺点线束
  • 【自动驾驶】单目3D检测M3D-RPN解析与paddle复现

    1 简介 作者提出了一种单个的端到端区域建议网络用于多类别3D目标检测 2D和3D检测任务各自的目标是最终对一个对象的所有实例进行分类 xff0c 而它们在定位目标的维数上是不同的 直观地说 xff0c 我们期望能够利用2D检测的强大功能来
  • 【模型压缩】实例分析量化原理

    1 从定点模型训练来分析量化原理 xff1a 定点模型训练是一个迁移训练的过程 xff1a 在浮点网络的相应位置插入定点化处理节点 xff08 相 当于激活函数 xff09 xff0c 然后在这个经过定点化的计算图上重新训练神经网络 以全连
  • 【3D视觉】深度摄像头与3D重建

    1 xff0c Kinect 是微软在2010年6月14日对XBOX360体感周边外设正式发布的名字 大家在上图可以看到 xff0c Kinect两端有两个3D深度摄像头 xff0c 左边那个发射红外线 xff0c 右边那个是一个红外线感应
  • 【3D视觉】realsense D435三维重建

    1 xff0c 硬件 xff1a realsense D435 驱动及SDK开发包安装 GitHub IntelRealSense librealsense Intel RealSense SDK 下载最新驱动 安装后打开 Intel Re
  • ssh: connect to host 10.112.1.5 port 10083: Connection refused

    ssh connect to host 10 112 1 5 port 10083 Connection refused 1 查看已知端口占用情况 我们想知道10083端口的使用情况 xff0c 或者说被谁占用了 xff0c 命令如下 xf
  • Unity之将Texture保存成png

    using UnityEngine using System Collections using System IO public class SaveToPng MonoBehaviour public Shader outShader
  • 基于容器训练OpenPCdet

    基于容器训练OpenPCdet 1 先拉取一个运行的镜像 docker pull djiajun1206 pcdet pytorch1 6 2 基于镜像创建一个容器 nvidia docker run it name pcdet privi
  • 【CUDA入门笔记】概述

    1 xff0c CUDA架构 xff08 1 xff09 一个GPU包含多个多核处理器 xff1b xff08 2 xff09 一个多核处理器包含多个线程处理器 xff08 3 xff09 线程处理器是最基本的计算单元 xff0c 有自己的
  • 【CUDA入门笔记】CUDA内核与线程配置

    1 CUDA核函数 在GPU上调用的函数成为CUDA核函数 Kernel function xff0c 核函数会被GPU上的多个线程执行 每个线程都会执行核函数里的代码 xff0c 当然由于线程编号的不同 xff0c 执行的代码路径可能会有
  • 【CUDA入门笔记】GPU存储结构模型(1)

    GPU存储结构模型 1 CPU可以读写GPU设备中的Global Memory Constant Memory以及Texture Memory内存储的内容 xff1b 主机代码可以把数据传输到设备上 xff0c 也可以从设备中读取数据 xf
  • 【CUDA入门笔记】GPU存储结构模型(2)

    GPU存储结构模型 1 CPU可以读写GPU设备中的Global Memory Constant Memory以及Texture Memory内存储的内容 xff1b 主机代码可以把数据传输到设备上 xff0c 也可以从设备中读取数据 xf

随机推荐

  • 基于多二维码识别的无人机运动真值获取

    基于多二维码识别的三维运动真值获取 1 背景介绍2 原理2 1 二维码基础2 2图像预处理2 3 定位标轮廓提取2 4 多二维码鲁棒识别 3 运行结果3 1对单张图片进行多二维码识别3 2 获取一系列静止图片的轨迹3 3 相机做圆周运动的轨
  • c++实现简单http服务器

    http基于tcp协议的应用层协议 xff0c 说白了就是写死的自定义协议 xff0c 代码实现了简单的get请求 xff0c 打开服务后 xff0c 可以通过网站访问本地资源 xff0c 适合新手学习的简单代码 xff0c 有助于理解ge
  • 基于NRF24L01的CAN数据透传

    闲谈 xff1a 闲来无聊 xff0c 恰好公司又经常用CAN数据的传输 xff0c 自己觉得要是用无线传送多好 xff0c 然后 xff0c 就是一个奇想 xff0c 就想做一个无线数据的透传 xff0c 恰好身边又有NRF24L01 那
  • 倾斜补偿的电子罗盘(1):地磁场,磁传感器,倾斜补偿

    倾斜补偿的电子罗盘 1 xff1a 地磁场 xff0c 磁传感器 xff0c 倾斜补偿 地磁场和磁传感器 地磁场可以用于获取方位信息 以北半球为例 xff0c 地磁场方向不是与地面水平 xff0c 而是与水平方向有一定的倾角 xff08 指
  • vscode常用插件

    vscode常用插件 1 Markdown All In One 在所有拓展插件中 xff0c 这个插件基础功能最全 xff0c 快捷键多 xff0c 方便使用 2 Markdown Toc 这个插件是用来生成目录 xff0c 这个插件我用
  • typescript中使用字典Dictionary

    key为string value为number var map key string number 61 34 t 34 3 34 o 34 5 34 g 34 10 for let k in map egret log map k
  • Qt Design Studio社区版安装与使用

    Qt Design Studio社区版免费下载 由于登录官网不能下载 xff0c 找到镜像网站进行下载 xff1a 基于msvc 2019 64位 xff1a http iso mirrors ustc edu cn qtproject o
  • vscode用conda配置Python虚拟环境

    1 到官网下载Anaconda2 下载vscode中Python插件3 以管理员身份运行vscode4 利用conda创建python虚拟环境5 在vscode中配置Setting json添加Python路径6 最后检验运行Python项
  • 阿里云搭建ftp服务器+FileZilla客户端查看文件

    文章目录 1 阿里云搭建ftp服务器1 1 安装ftp服务器1 2 设置阿里云ECS的安全组 2 FileZilla客户端查看文件 1 阿里云搭建ftp服务器 1 1 安装ftp服务器 1 安装vsftp xff0c sudo span c
  • QtCreator+windows崩溃定位分析

    文章目录 一 Qt程序Release版本记录崩溃信息 xff0c 并定位问题代码1 Release版本程序中生成pdb调试信息文件2 添加代码将程序崩溃时的堆栈保存为crash dmp文件3 使用 WinDbg 分析crash dmp文件
  • Qt项目入门

    一个简单的项目 该项目涉及tcp服务端客户端通信 xff0c 数据库操作 xff0c Log4Qt日志打印 xff0c 不过是关于工业与上位机的一个简单项目处理 xff0c 过程不一定容易理解 xff0c 附上通讯协议 Qt5 12 Min
  • delete this注意事项

    参考资料 在类中调用delete this问题
  • c++较常用的库函数

    不知道原创是谁 xff0c 转载自 xff1a https blog csdn net laozhuxinlu article details 51878947 C 43 43 常用库函数 如图1所示 xff0c 常用数学函数 头文件 in
  • 学习c++的50个网站

    原 xff1a http blog chinaunix net uid 20548989 id 2979724 html 大家都说学Java好找工作 xff0c 可是Java我都遗忘好久了 xff0c 大一大二荒废了 xff0c 没好好练编
  • 数据预处理-数据清洗之numpy创建及属性

    什么是数据预处理 xff1f 数据预处理 xff08 data preprocessing xff09 是指在主要的处理以前对数据进行的一些处理 一般我们得到的数据会存在有缺失值 重复值等 xff0c 在使用之前需要进行数据预处理 它是一系
  • 数据预处理-数据清洗之numpy访问与计算

    如何访问numpy数组中的元素 xff1f 采用索引或者切片的方式 span class token comment 导入包 span span class token keyword import span numpy span clas
  • Unity Spine 换图(通过外部图片)

    在spine中 xff0c 如果想通过外部一张单独的来替换动画中的某个部位 xff0c 需要手动创建Attachment using UnityEngine using System Collections using Spine Unit
  • stm32 esp8266 ota升级-hex合并-烧录-bin生成

    stm32 esp8266 ota系列文章 xff1a stm32 esp8266 ota 快速搭建web服务器之docker安装openresty stm32 esp8266 ota升级 tcp模拟http stm32 esp8266 o
  • 字符串与字符数组的大小

    验证字符串与字符数组的大小 xff0c 代码如下 xff1a include lt stdio h gt int main 字符串与字符数组的区别 int data 61 1 2 3 4 5 char cdata 61 39 h 39 39
  • 数据预处理-数据清洗之pandas库的简单使用

    创建一个series span class token comment 导入包 span span class token keyword import span numpy span class token keyword as span