pandas1

news2024/11/24 0:21:02

pandas

  • pandas 的核心是:‘Series’、‘DataFrame’、'Index’三个类型

1. 创建DataFrame对象

1.1 通过二维数组创建

scores = np.random.randint(60,101,(5,3))
scores
'''
array([[ 91,  87,  87],
       [100,  80,  61],
       [ 76,  84,  80],
       [ 81,  97,  69],
       [ 67,  77,  65]])
'''
df1=pd.DataFrame(data=scores,
             columns=['Verbal','Math','English'],
             index=np.arange(1001,1006))
df1

在这里插入图片描述

1.2 字典提供数据创建

my_dict = {
    'Verbal': [91,93,89,75,60],
    'Math': [77,80,85,79,74],
    'Rnglish': [88,78,91,67,86]
}
my_dict
'''
{'Verbal': [91, 93, 89, 75, 60],
 'Math': [77, 80, 85, 79, 74],
 'Rnglish': [88, 78, 91, 67, 86]}
'''
# 方法2:通过字典提供数据创建DataFrame对象
df2 = pd.DataFrame(data=my_dict, index=np.arange(1001,1006))

1.3 通过csv文件创建

df3 = pd.read_csv(
    'E:/文档/excel/2018年北京积分落户数据.csv',
    index_col='id', # 指定索引列
    encoding='utf-8',
    sep=',', # 字段分隔符,默认值为','
    # header=0 # 指定表头在第几行(从0开始)
    # quoterchar='`', # 去掉包裹字符串的符号(默认英文上引号)
    # usecols=['id','name','score'], # 读取指定行
    # nrows=20, # 限制读取行数
    # skiprows=np.arange(1,21), # 跳过行号
    # 数据过大时可用:
    # iterator=True, # 启用迭代器模式
    # chunksize=1000 # 每次加载的数据体量
)
df3

1.4 通过Excel创建

df5 = pd.read_excel(
    'E:/文档/excel/2020年销售数据 (2).xlsx',
    sheet_name='data', # 指定工作表名字
    header=1, # 指定表头
)
df5

1.5 从关系型数据库二维表加载

# 方法1
import pymysql
conn = pymysql.connect(host='***', port=3306,
                      user='***', password='***',
                       database='***',charset='utf8mb4'
                      )
conn
%pip install -U pymysql "sqlalchemy<2.0"
# 方法2
from sqlalchemy import create_engine
# URL - 统一资源定位符
# 协议+自协议://用户名:口令@域名或IP地址:端口/路径/资源名称
engine = create_engine('mysql+pymysql://用户名:密码@域名或IP地址:3306/库名')
engine
df7 = pd.read_sql_query('select * from tb_dept', engine, index_col='dno')
df9 = pd.read_sql_table('tb_dept', engine, index_col='eno')
df8 = pd.read_sql('select * from tb_emp',conn, index_col='eno')
df8 = pd.read_sql_query('select * from tb_dept natural join tb_emp', engine, index_col='dno')
df10 = pd.read_sql('tb_emp2',engine,index_col='eno')

2.索引

2.1 行索引:index

# 行索引
df1.index  # Index([1001, 1002, 1003, 1004, 1005], dtype='int32')
# 行索引的值
df1.index.values  # array([1001, 1002, 1003, 1004, 1005])
df1.index.tolist() # [1001, 1002, 1003, 1004, 1005]

2.2 列索引:columns

# 列索引
df1.columns 
# Index(['Verbal', 'Math', 'English'], dtype='object')
# 列索引的值
df1.columns.values # array(['Verbal', 'Math', 'English'], dtype=object)
df1.values
'''
array([[ 91,  87,  87],
       [100,  80,  61],
       [ 76,  84,  80],
       [ 81,  97,  69],
       [ 67,  77,  65]])
'''

2.3 取列

  • dataframe名.列名

df1.Math
'''
1001    87
1002    80
1003    84
1004    97
1005    77
Name: Math, dtype: int32
'''
type(df1.Math) # pandas.core.series.Series

2.4 取行

df1.loc[1003]
'''
Verbal     76
Math       84
English    80
Name: 1003, dtype: int32
'''

2.4 获取单元格

# (1)先行后列
df1.loc[1003]['English'] # 80
# (2)先列后行
df1['English'][1003]
#(3)at
df1.at[1003,'English']

2.5 修改单元格

df1.at[1003,'English']=88

2.6 添加行/列

# 添加行
df1.loc[1006] = [77,88,78]
df1
# 添加列
df1['评级'] = ['A','B','C','D','A','B']
df1
df1.insert(1, 'married', True)
df1

2.6 取前/后几行

df1.head()
df1.tail()

2.7 取消索引

df10.reset_index(inplace=True)

2.8 重设索引

df10.set_index('eno',inplace=True)

3.数据重塑

mergeconcat

# 连接两表
# 有相同列名时
pd.merge(df7,df8,on='dno',how='left')

rename

# 修改列名
df8.rename(columns={'dno':'depyno'},inplace=True)
# 列名不相同时连接两个表
pd.merge(df7,df8,left_on='dno',right_on='depyno',how='inner')
# 数据拼接(通常用于数据结构相同的DataFrame对象)
df11 = pd.concat((df8,df10))

删除行、列

# 删除行/列
df11.drop(columns=['mgr','comm'],index=[9700])

4. 数据清洗

4.1 空值处理

1)判断空值

# 判断空值,显示的是TRUE和FALSE
df11.isna()
df11.isnull()

2)替换

# 将comm字段的空值填为0 
df11.comm.fillna(0,inplace=True)
# 替换操作
df11.comm.replace(0,np.nan,inplace=True)
# 将空值替换成它的上/下一个值
# 上一个:ffill 下一个:bfill
df11.comm.fillna(method='ffill')

3) 删除

# 根据布尔索引删除补贴为空值的员工
df11.drop(index=df11[df11.comm.isna()].index,inplace=True)
# 删除有空值的列
df11.dropna(axis=1)

4)判断非空值

# 判断非空值
df5.notna()
df5.notnull()
# 获取job字段中非空值内容
df5[df5.job.isna()].index

# 通过布尔索引获取job字段为空的员工索引,然后删除这个员工
df5.drop(index=df5[df5.job.isna()].index, inplace=True)

# 删除有空值的行
df5.dropna()

# 删除有空值的列
df5.dropna(axis=1)

4.2 重复值

1)判断重复值

# 判断重复
df5.duplicated(['ename', 'job'])

2)删除重复数据

# 删除重复数据
# keep - 'first' / 'last' / False
df5.drop_duplicates(['ename', 'job'], keep='last', inplace=True)
df5.comm.duplicated()

3)统计重复值

# 统计有多少个不重复数据
df5.comm.nunique()

# 统计每个元素重复的次数(按次数从高到低排列)
df5.comm.value_counts()

# 获取独一无二的元素构成的数组
df5.comm.unique()

4.4 异常值

temp = np.random.randint(1, 100, 100)
temp = np.append(temp, [180, 200, 250, -50, -100, -160])
plt.boxplot(temp, showmeans=True, sym='x')
plt.show()

在这里插入图片描述

1)数值判定法

# 请设计一个函数,给入一个数组或数据系列,找出离群点返回
# 要求:用数值判定法对离群点进行甄别

def detect_outliers_by_iqr(data, whis=1.5):
    """甄别离群点(数值判定法)"""
    q3, q1 = np.quantile(data, [0.75, 0.25])
    iqr = q3 - q1
    return data[(data < q1 - whis * iqr) | (data > q3 + whis * iqr)]
detect_outliers_by_iqr(temp)
detect_outliers_by_iqr(temp, whis=3)

2)Z-score:|𝑧|>3

𝑧=(𝑥𝑖-𝜇)/𝜎

def detect_outliers_by_zscore(data):
    """甄别离群点(zscore判定法)"""
    mu, sigma = np.mean(data), np.std(data)
    z = (data - mu) / sigma
    return data[np.abs(z) > 3]
detect_outliers_by_zscore(temp)

4.5 预处理

# 案例:
jobs_df = pd.read_csv('../res/jobs.csv', index_col='id')
jobs_df.info()

# 删除uri、city字段(删除不需要字段)
jobs_df.drop(columns=['uri', 'city'], inplace=True)
jobs_df.tail(5)

# 从salary字段抽取出薪资的下限和上限并处理成平均值
salary = jobs_df.salary.str.upper().str.extract(r'(\d+)-(\d+)').astype('i8').mean(axis=1)
jobs_df = jobs_df.assign(salary=salary)
jobs_df['salary'] = salary

# 将地址site字段拆分为三个列
jobs_df[['city', 'district', 'stree']] = jobs_df.site.str.split(expand=True)
jobs_df.drop(columns=['site'], inplace=True)
jobs_df

# edu字段的高中和中专替换为学历不限
jobs_df.edu.unique()
jobs_df.edu.replace('高中|中专', '学历不限', regex=True, inplace=True)

# 通过job_name字段匹配关键词筛选数据
jobs_df['job_name'] = jobs_df.job_name.str.lower()
jobs_df = jobs_df[jobs_df.job_name.str.contains('python|数据分析', regex=True)]

# 重置索引并将清洗后的数据写入CSV文件
jobs_df.reset_index(drop=True, inplace=True)
jobs_df.index.name = 'id'
jobs_df.to_csv('res/cleaned_jobs.csv')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/555658.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何查看SSL证书的有效期?(中科三方)

SSL证书能够对数据传输进行加密处理&#xff0c;对网站的真实性进行核验&#xff0c;是网站提升数据安全能力的重要手段&#xff0c;现在已经有越来越多的网站开始安装SSL证书。但为了保障加密技术的快速更新&#xff0c;SSL证书的有效期逐渐缩短&#xff0c;而一旦SSL证书失效…

【腾讯云 Finops Crane 集训营】心得体会

【腾讯云 Finops Crane 集训营】心得体会 一直在关注技术社区的活动&#xff0c;希望看到更多的新技术&#xff0c;最近在逛 CSDN 的过程中&#xff0c;让我有机会参加了腾讯云的 Finops Crane 开源项目的第一季活动&#xff0c;从而深入了解了这个项目。Crane是一种云资源分析…

PMP常考知识点整理

1十大知识领域之项目整合管理 ❒ 变更控制流程&#xff08;简化版&#xff09; 书面记录变更请求→分析影响→提交CCB进行审批→批准或者拒绝→若批准&#xff0c;先修改计划&#xff08;体现变更&#xff09;&#xff0c;再通知变更受影响相关方&#xff0c;最后再执行、追踪…

【PCIE720】 基于PCIe总线架构的高性能计算(HPC)硬件加速卡

板卡概述 PCIE720是一款基于PCI Express总线架构的高性能计算&#xff08;HPC&#xff09;硬件加速卡&#xff0c;板卡采用Xilinx的高性能28nm 7系列FPGA作为运算节点&#xff0c;在资源、接口以及时钟的优化&#xff0c;为高性能计算提供卓越的硬件加速性能。板卡一共具有5个F…

Linux---文件操作命令(find、which、read)

1. find命令 find [路径] [参数] 要查找的目录路径&#xff0c;可以是一个目录或文件名&#xff0c;也可以是多个路径&#xff0c;多个路径之间用空格分隔&#xff0c;如 果未指定路径&#xff0c;则默认为当前目录。 可选参数&#xff0c;用于指定查找的条件&#xff0c;可…

day37_JQuery

今日内容 零、 复习昨日 一、JQuery 零、 复习昨日 正则 匹配,筛选字符串[0-9a-zA-ZA-z\d\w]*?{3}{4,}{5,10}^$reg.test(字符) jquery js封装的库,封装js操作,可以用来操作事件,dom,动画,ajax$("#id") $("element") $(".class")$("选择器…

chatgpt赋能Python-pythonwhile遍历

Python中使用while循环遍历的优势 Python是一种高级语言&#xff0c;广泛用于Web开发、数据科学、人工智能等方面。Python提供了多种循环结构&#xff0c;其中while循环是一种非常常用的遍历方式。在本篇文章中&#xff0c;我们将介绍如何在Python中使用while循环遍历&#xf…

A2L文件的自动生成(Simulink/CANape)

目录 什么是A2L文件&#xff1f; 使用simulink生成A2L文件 A2L文件组成 characteristic measurement compu_method group simulink生成的A2L与CANape生成的A2L 如何自动修改simulink生成A2L文件使其适用于CANape&#xff1f; 所需文件 什么是A2L文件&#xff1f; A2…

27 KVM管理系统资源-管理虚拟CPU份额

文章目录 27 KVM管理系统资源-管理虚拟CPU份额27.1 概述27.2 操作步骤 27 KVM管理系统资源-管理虚拟CPU份额 27.1 概述 虚拟化环境下&#xff0c;同一主机上的多个虚拟机竞争使用物理CPU。为了防止某些虚拟机占用过多的物理CPU资源&#xff0c;影响相同主机上其他虚拟机的性能…

什么是数字化校园,校园怎么数字化?

教育数字化转型是目前教育领域的一个热门话题&#xff0c;那么到底什么是教育数字化转型&#xff1f;如何做好教育数字化转型&#xff1f;这就来回答一下&#xff01; 阅读本文你将了解&#xff1a; 什么是教育数字化转型&#xff1f;零代码平台如何撬动教育数字化转型&#…

真别去阿里面试,6年测开经验的真实面试经历.....

前几天我朋友跟我吐苦水&#xff0c;这波面试又把他打击到了&#xff0c;做了快6年软件测试员。。。为了进大厂&#xff0c;也花了很多时间和精力在面试准备上&#xff0c;也刷了很多题。但题刷多了之后有点怀疑人生&#xff0c;不知道刷的这些题在之后的工作中能不能用到&…

Linux·eventfd 原理与实践

1. eventfd/timerfd 简介 目前越来越多的应用程序采用事件驱动的方式实现功能&#xff0c;如何高效地利用系统资源实现通知的管理和送达就愈发变得重要起来。在Linux系统中&#xff0c;eventfd是一个用来通知事件的文件描述符&#xff0c;timerfd是的定时器事件的文件描述符。…

防火墙(三)

firewalld防火墙 一、firewalld概述firewalld与iptables的区别firewalld区域firewalld数据处理流程 二、firewalld防火墙的使用配置方法常用的firewalld-cmd命令选项 三、操作小实验 一、firewalld概述 firewalld防火墙是Centos 7 系统默认的防火墙管理工具&#xff0c;取代了…

AWS设备自定义身份认证

AWS设备自定义身份认证需要通过lambda服务实现&#xff0c;具体来说&#xff0c;首先需要创建一个lambda函数&#xff0c;在函数中实现具体的认证逻辑&#xff0c;然后Iot在调用授权方时&#xff0c;将触发lambda函数&#xff0c;返回认证结果。 1.输入参数说明 授权方在调用…

Qt编程基础 | 使用VS创建空白Qt项目

一、使用VS创建空白Qt项目 使用VS创建空白Qt项目&#xff0c;如下&#xff1a; 步骤一&#xff1a;新建一个空白Qt项目 步骤二&#xff1a;手动添加需要的文件 头文件代码&#xff0c;如下&#xff1a; #include <QtWidgets/QApplication> #include <QWidget>int…

C++11 异常

文章目录 &#x1f356;异常是什么&#x1f32d;概念&#x1f32d;实现方式 &#x1f356;异常的使用和注意事项&#x1f32d;注意事项&#x1f32d;异常的重新抛出&#x1f32d;异常安全 &#x1f356;异常的规范&#x1f356;异常带来的优缺点 &#x1f356;异常是什么 &…

jQurey-基本知识点总结

&#xff08;一&#xff09;jQurey基础知识 1、官网下载&#xff1a;jQuery jQurey是一个js文件&#xff0c;直接存到项目文件中&#xff0c;然后跟平常文件js导入一致&#xff1a; <script src"js/jquery-3.7.0.js"></script> 2、jQurey语法 jQure…

邹检验,结构变化识别及其R语言实现

在描述多维数据的维度关系时&#xff0c;线性模型无疑应用最多。然而某些情况下&#xff0c;我们关心随着时间变化或随着样本分组&#xff0c;线性关系的具体参数是否发生了变化&#xff0c;即是否发生结构变化Structural break。邹检验Chow test提供了最基本的一种结构变化显著…

Solaris Network:去中心化金融(DeFi)的未来

近年来&#xff0c;金融世界经历了一场范式转变&#xff0c;区块链技术在实现无障碍和反审计的去中心化金融服务方面发挥了关键作用。在这样的背景下&#xff0c;Solaris Network应运而生&#xff0c;它创建了一个基于Web 3.0技术的去中心化合成资产生态系统。 什么是Solaris N…

制作网上投票链接制作可以投票的链接制作制作一个投票链接

现在来说&#xff0c;公司、企业、学校更多的想借助短视频推广自己。 通过微信投票小程序&#xff0c;网友们就可以通过手机拍视频上传视频参加活动&#xff0c;而短视频微信投票评选活动既可以给用户发挥的空间激发参与的热情&#xff0c;又可以让商家和企业实现推广的目的&am…