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

2024-05-07 01:36

本文主要是介绍数据分析从入门到精通 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 npdic = {"张三":[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 DataFramedic = {"张三":[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 pddic = {'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 pddic = {'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)

这篇关于数据分析从入门到精通 2.pandas修真之前戏基础的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/965960

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

pandas数据过滤

Pandas 数据过滤方法 Pandas 提供了多种方法来过滤数据,可以根据不同的条件进行筛选。以下是一些常见的 Pandas 数据过滤方法,结合实例进行讲解,希望能帮你快速理解。 1. 基于条件筛选行 可以使用布尔索引来根据条件过滤行。 import pandas as pd# 创建示例数据data = {'Name': ['Alice', 'Bob', 'Charlie', 'Dav

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

MySQL-CRUD入门1

文章目录 认识配置文件client节点mysql节点mysqld节点 数据的添加(Create)添加一行数据添加多行数据两种添加数据的效率对比 数据的查询(Retrieve)全列查询指定列查询查询中带有表达式关于字面量关于as重命名 临时表引入distinct去重order by 排序关于NULL 认识配置文件 在我们的MySQL服务安装好了之后, 会有一个配置文件, 也就

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close