数据分析从入门到精通 2.pandas修真之前戏基础

从爱上自己那天起,人生才真正开始

                                                        —— 24.5.6

为什么学习pandas

        numpy已经可以帮助我们进行数据的处理了,那么学习pandas的目的是什么呢?
        numpy能够帮助我们处理的是数值型的数据,当然在数据分析中除了数值型的数据还有好多其他类型的数据(字符串时间序列),那么pandas就可以帮我们很好的处理除了数值型的其他数据!

什么是pandas?

首先先来认识pandas中的两个常用的类
        Series
        DataFrame

Series类

Series是一种类似与一维数组的对象,由下面两个部分组成:

        values:一组数据(ndarray类型)
        index:相关的数据索引标签

Series的创建

        由列表创建

from pandas import Series
# Series的创建
# 由列表创建
s1 = Series(data=[1,2,3,"four"])
print(s1)
print("——————————————————————————————————————")

        由numpy数组创建

# 由numpy数组创建
import numpy as np
s2 = Series(data=np.random.randint(0,100,size=(3)))
print(s2)
print("——————————————————————————————————————")

index参数用来指定显示索引的 默认的0,1,2,3为隐式索引

# index参数用来指定显示索引的 默认的0,1,2,3为隐式索引
s3 = Series(data=[1,2,3,"four"],index=['a','b','c','d'])
print(s3)
print("——————————————————————————————————————")


        由字典创建

        为什么需要有显示索引?

                显示索引可以增强series的可读性

# 由字典创建
dic = {
    '语文':99,
    '数学':100,
    '英语':100
}
s4 = Series(data=dic)
print(s4)
print("——————————————————————————————————————")

Seires的索引和切片

dic = {
    '语文':99,
    '数学':100,
    '英语':100
}
s4 = Series(data=dic)
print(s4)
print("——————————————————————————————————————")

# 索引
print(s4[0])
print(s4.语文)
# 切片
print(s4[0:2])

Series的常用属性

        shape:返回数组的形状

        size:返回数组元素的个数

        index:返回数组的索引

        values:返回存储的元素值

# shape:返回数组的形状   ize:返回数组元素的个数   index:返回数组的索引   values:返回存储的元素值
s = Series(data=[1,1,4,"一切都会好的","我一直相信"])
print(f"s.shape={s.shape}")
print(f"s.size={s.size}")
print(f"s.index={s.index}")
print(f"s.values={s.values}")
print(f"s.dtype={s.dtype}")

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

​Series的常用方法

        head(),tail()

# 导包
import numpy as np
from pandas import Series

# 创建Series数组对象
s = Series(data=np.random.randint(60,100,size=(10,)))

# head() 显示前n个数组元素,n默认为5
print(f"s={s}")
print(f"s.head()={s.head()}") # 显示数组中前n个对象,默认n是5
print("s.head(2)={s.head(2)}")
print("——————————————————————————————————————")

# tail() 显示后n个数组元素,n默认为5
print(f"s={s}")
print(f"s.tail()={s.tail()}") # 显示数组中后n个对象,默认n是5
print("s.tail(2)={s.tail(2)}")
print("——————————————————————————————————————")

        unique()

# 导包
import numpy as np
from pandas import Series

# 创建Series数组对象
s = Series(data=np.random.randint(60,100,size=(10,)))

# unique()去重,去除重复的数据
print(f"s={s}")
print(f"s.unique()={s.unique()}")
print("——————————————————————————————————————")

 

        isnull(),notnull()

# 导包
import numpy as np
from pandas import Series

# 创建Series数组对象
s = Series(data=np.random.randint(60,100,size=(10,)))
# isnull 用于判断每个元素是否为空 如果为空返回true,否则返回false
print(f"s.isnull()={s.isnull()}")
print("——————————————————————————————————————")

# notnull 用于判断每个元素是否不为空 如果不为空返回true,否则返回false
print(f"s.notnull()={s.notnull()}")
print("——————————————————————————————————————")

        add()加法、 sub()减法、 mul()乘法、 div()除法

Seriese的算术法则

        —— 法则:索引一致的元素进行算术运算否则补空

DataFrame类

DataFrame是一个【表格型】的数据结构。DataFrame由按一定顺序排列的多列数据组成。设计初衷是将Series的使用场景从一维拓展到多维。DataFrame既有行索引,也有列索引。
        行索引:index
        列索引:columns
        索引所对的值:values

DataFrame的创建

        ndarray创建

# 导包
from pandas import DataFrame
import numpy as np

# DataFrame的创建
# ndarray创建
df1 = DataFrame(data=[[1,2,3],[4,5,6]])
print(df1)

df2 = DataFrame(data=np.random.randint(0,100,size=(6,4)))
print(df2)

        字典创建

# DataFrame的创建
# 字典创建
dic = {
    'name':["张三","李四","王老五"],
    "salary":[1000,2000,3000]
}

df3 = DataFrame(data=dic)
print(df3)

DataFrame的属性

        values: 二维数组存储的数据

        columns:返回列索引

        index:返回行索引

        shape:返回形状(几行几列)

# 导包
from pandas import DataFrame
import numpy as np

# DataFrame的创建
# ndarray创建
df = DataFrame(data=np.random.randint(0,100,size=(6,4)))
print(df)
print(df.values)
print(df.index)
print(df.columns)
print(df.shape)
print(df.dtypes)

练习

根据以下考试成绩表,创建一个DataFrame,命名为df:
                张三 李四

        语文 150     0
        数学 150     0
        英语 150     0
        理综 300     0

# 导包
from pandas import DataFrame
import numpy as np

dic = {
    "张三":[150,150,150,300],
    "李四":[0,0,0,0]
}
df = DataFrame(data=dic,index=["语文","数学","英语","理综"])
print(df)

DataFrame索引操作

        对行进行索引,取列

# 导包
from pandas import DataFrame
import numpy as np

# DataFrame索引操作
# 创建数据源
# 行索引是显示的,列索引是隐式的 列索引是显示的:a、b、c、d
df = DataFrame(data=np.random.randint(60,100,size=(8,4)),columns=['a','b','c','d'])

print("取单列:")
# 对行进行索引
# 取单列,如果df有显示的索引,通过索引机制取行或者列的时候只能使用显示索引
print(df['a'])
print("——————————————————————————————————————")

# 用隐式索引取单列
print("隐式索引取单列")
print(df.iloc[0])
print("——————————————————————————————————————")

# 取多列 需要两个中括号
print("取多列:")
print(df[['a','b','c']])
print("——————————————————————————————————————")

# 通过隐式索引取列
print("隐式索引取列:")
print(df.iloc[0])
print("——————————————————————————————————————")

        对列进行索引,取行

# 导包
from pandas import DataFrame
import numpy as np

# DataFrame索引操作
# 创建数据源
# 行索引是显示的,列索引是隐式的 列索引是显示的:a、b、c、d
df = DataFrame(data=np.random.randint(60,100,size=(8,4)),columns=['a','b','c','d'])

# 对列进行索引
# 隐式索引取单行
print("隐式索引取单行:")
print(df.iloc[0])
print("——————————————————————————————————————")

# 取多行 需要两个中括号
# 隐式索引取多行
print("隐式索引取多行:")
print(df.iloc[[0,3,5]])
print("——————————————————————————————————————")

# 显示索引取单行
print("显式索引取单行:")
print(df.loc[0])

# 显示索引取多行
# 由于数组没有显示索引,所以iloc和loc都可以求隐式索引,如果数组中有显示索引,loc后面只能跟显示索引不能跟隐式索引
print("显式索引取多行:")
print(df.iloc[[0,3,5]])
print("——————————————————————————————————————")

      对元素进行索引

# 导包
from pandas import DataFrame
import numpy as np

# DataFrame索引操作
# 创建数据源
# 行索引是显示的,列索引是隐式的 列索引是显示的:a、b、c、d
df = DataFrame(data=np.random.randint(60,100,size=(8,4)),columns=['a','b','c','d'])

# 对元素进行索引
print("对元素进行索引")
print("取单个元素")
print(df.iloc[0,2])
print(df.loc[0,'a'])
print("——————————————————————————————————————")

print("取多个元素")
print(df.iloc[[1, 3, 5], 2])

—— iloc:

        通过隐式索引取行

—— loc:

        通过显示索引取行

总结

df索引和切片操作

        索引:
                df[col]:取列
                df.loc[index]:取行
                df.iloc[index,col]:取元素

        切片:
                df[index1:index3]:切行

                df.iloc[:,col1:col3]:切列

DataFrame的运算

        —— 同Series运算一致

        —— 法则:索引一致的元素进行算术运算否则补空

        add()加法、 sub()减法、 mul()乘法、 div()除法

练习

1.假设ddd是期中考试成绩,ddd2是期末考试成绩,请自由创建ddd2,并将其与ddd相加,求期中期末平均值。
2.假设张三期中考试数学被发现作弊,要记为0分,如何实现?
3.李四因为举报张三作弊立功,期中考试所有科目加100分,如何实现?
4.后来老师发现有一道题出错了,为了安抚学生情绪,给每位学生每个科目都加10分,如何实现?

# 导包
from pandas import DataFrame

dic = {
    "张三":[150,150,150,150],
    "李四":[0,0,0,0]
}

# 根据字典创建数组
df=DataFrame(data=dic,index=["语文","数学","英语","理综"])

# 期中考试
MidTest = df

# 期末考试
LastTest = df

# 期中+期末的平均值
print((MidTest+LastTest)/2)

# 张三期中作弊了,将数学分数改为0
MidTest.loc["数学","张三"] = 0
print(MidTest)

# 李四举报张三,将李四所有成绩+100
MidTest["李四"] += 100
print(MidTest)

# 后来老师发现有一道题出错了,为了安抚学生情绪,给每位学生每个科目都加10分
MidTest += 10
print(MidTest)

时间数据类型的转换

pd.to_datetime(col)将某一列

# 导包
from pandas import DataFrame
import pandas as pd

dic = {
    'time':["2010-10-10","2011-11-20","2020-1-10"],
    "temp":[33,31,30]
}

df = DataFrame(data=dic)
print(df)

# 查看time列的类型
print(df["time"].dtype)
print("————————————————————————————————————")
# 将time列的数据类型转换成时间序列类型
df['time'] = pd.to_datetime(df["time"])
print(df)
print(df['time'].dtype)
print("————————————————————————————————————")

设置为行索引

df.set_index(

# 导包
from pandas import DataFrame
import pandas as pd

dic = {
    'time':["2010-10-10","2011-11-20","2020-1-10"],
    "temp":[33,31,30]
}

df = DataFrame(data=dic)
print(df)

# 将time列作为原数据的行索引,替换10,1,2
df.set_index('time', inplace=True)
print(df)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

信通院智能体标准发布,实在智能牵头编写

4月28日,由人工智能关键技术和应用评测工业和信息化部重点实验室、中国信息通信研究院(以下简称:中国信通院)人工智能研究所共同主办的“人工智能”高质量发展研讨会顺利召开,会上中国信通院正式发布全国首个Agent&…

【C++】string类的使用②(容量接口Capacity || 元素获取Element access)

🔥个人主页: Forcible Bug Maker 🔥专栏: STL || C 目录 前言🔥容量接口(Capacity)size和lengthcapacitymax_sizereserveresizeclearemptyshrink_to_fit 🔥元素获取(Ele…

从零开始打造个性化生鲜微信商城小程序

随着移动互联网的普及,小程序商城已经成为越来越多商家的选择。本文将通过实战案例分享,教您如何在五分钟内快速搭建个性化生鲜小程序商城。 步骤一:登录乔拓云网后台,进入商城管理页面 打开乔拓云官网,点击右上角的“…

【连连国际注册_登录安全分析报告】

连连国际注册/登录安全分析报告 前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨…

队列 (Queue)

今日励志语句:别总听悲伤的歌,别总想从前的事,别让过去拖住脚,别让未来被辜负。 前言:前面写了一篇 栈的实现,接下来学习一下它的"兄弟" 一、队列的概念: 队列: 也是数据…

C++类和对象(三) 缺省值 | static成员 | 内部类

前言: 这是关于类和对象的最后一篇文章,当然还是基础篇的最后一篇,因为类的三大特性继承,封装和多态都还没有讲,少年,慢慢来。 缺省值: 之前讲过,在C11的新标准中,支持为…

百面算法工程师 | 支持向量机面试相关问题——SVM

本文给大家带来的百面算法工程师是深度学习支持向量机的面试总结,文章内总结了常见的提问问题,旨在为广大学子模拟出更贴合实际的面试问答场景。在这篇文章中,我们还将介绍一些常见的深度学习算法工程师面试问题,并提供参考的回答…

哈夫曼编码python算法实现(图片版)

一、问题: 请使用哈夫曼编码方法对给定的字符串,进行编码,以满足发送的编码总长度最小,且方便译码。“AABBCCDDEEABCDDCDBAEEAAA” 二、过程: 三、结果:

软件1班20240509

文章目录 1.JDBC本质2.增3.改4.删5.查6.JDBC标准写法 1.JDBC本质 重写 接口的 方法 idea 报错 – 不动脑 alt enter 知道没有重写方法 CTRL o 重写 方法 快捷键 package com.yanyu;/*** Author yanyu666_508200729qq.com* Date 2024/5/9 14:42* description:*/ public interf…

网安学习路线终极指南!一步步带你从入门到精通,详尽技能点全解析!

目录 零基础小白,到就业!入门到入土的网安学习路线! 建议的学习顺序: 一、夯实一下基础,梳理和复习 二、HTML与JAVASCRIPT(了解一下语法即可,要求不高) 三、PHP入门 四、MYSQL…

(三十七)第 6 章 树和二叉树(二叉树的二叉链表存储表示实现)

1. 背景说明 2. 示例代码 1) errorRecord.h // 记录错误宏定义头文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 从文件路径中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? st…

欧洲杯/奥运会-云直播

欧洲杯/奥运会要来了&#xff0c;如何升级自己的网站让你的顾客都能观赏直播已提高用户量呢&#xff1f;&#xff01; 【功能完善、平滑兼容】 云直播支持 RTMP 推流、 HLS 源站等多种直播源接入方式&#xff0c;提供直播 SDK&#xff0c;支持多终端适配&#xff0c;上行码率…

蓝桥杯省三爆改省二,省一到底做错了什么?

到底怎么个事 这届蓝桥杯选的软件测试赛道&#xff0c;都说选择大于努力,软件测试一不卷二不难。省赛结束&#xff0c;自己就感觉稳啦&#xff0c;全部都稳啦。没想到一出结果&#xff0c;省三&#xff0c;g了。说落差&#xff0c;是真的有一点&#xff0c;就感觉和自己预期的…

LeetCode例题讲解:只出现一次的数字

给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题&#xff0c;且该算法只使用常量额外空间。 示例 1 &#xff1a; 输入&#xff…

JavaSwing课程设计-实现一个计算器程序

通过JavaSwing技术来实现计算器小程序&#xff0c;效果如下。 源码下载链接 源码下载 博主承诺真实有效&#xff0c;私信可提供支持

独家新闻:CSCWD 2024会议现场即时报道 天津之眼夜色如梦

会议之眼 快讯 备受瞩目的第27届国际计算机协同计算与设计大会&#xff08;CSCWD 2024&#xff09;于2024年5月8日在中国天津梅江中心皇冠假日酒店盛大开幕&#xff01;来自世界各地的专家学者齐聚一堂&#xff0c;共同探讨和分享在智能设计、制造和协同工作领域的最新研究成果…

【全开源】Java上门洗车小程序源码上门洗车APP 小程序源码支持二次开发6.0

功能特点&#xff1a; 跨界创新&#xff1a;融入科技元素&#xff0c;借助移动互联网快速发展&#xff0c;将科技引入到传统洗车业中。 科技赋能&#xff1a;具有智能化的特点&#xff0c;用户可以根据自身的需求选择不同的洗车项目和服务&#xff0c;包括洗车的时间、地点和服…

MFC实现点击列表头进行排序

MFC实现点击列表头排序 1、添加消息处理函数 在列表窗口右键&#xff0c;类向导。选择 IDC_LIST1&#xff08;我的列表控件的ID&#xff09;&#xff0c;消息选择LVN_COLUMNCLICK。 2、消息映射如下 然后会在 cpp 文件中生成以下函数 void CFLashSearchDlg::OnLvnColumnclic…

IPFoxy:什么是静态住宅IP?静态ISP代理指南

静态住宅代理&#xff08;也称为静态ISP代理&#xff09;是最流行的代理类型之一。它们也是隐藏您的身份并保持在线匿名的最佳方法之一。您为什么要使用住宅代理而不是仅使用常规代理服务&#xff1f;下面我具体分享。 一、什么是静态住宅代理&#xff1f; 首先&#xff0c;我…

Hotcoin Research | 模块化将是大势所趋:拆解模块化区块链的现状和未来

关于模块化区块链叙事的讨论源于Celestia和其代币TIA的亮眼表现。实际上&#xff0c;模块化是未来区块链设计的主要发展方向和大势所趋。模块化区块链就像乐高积木一样&#xff0c;将区块链系统拆分为可重用的模块&#xff0c;通过定制组合可实现不同功能的区块链网络。这种灵活…
最新文章