首页 > 其他分享 >【pandas基础】--核心数据结构

【pandas基础】--核心数据结构

时间:2023-05-07 21:55:34浏览次数:38  
标签:head -- Series DataFrame df pd 数据结构 pandas

pandas中用来承载数据的两个最重要的结构分别是:

  1. Series:相当于增强版的一维数组
  2. DataFrame:相当于增强版的二维数组

pandas最大的优势在于处理表格类数据,如果数据维度超过二维,一般我们会使用另一个 python的库 numpy

本篇主要介绍这两种核心数据结构的创建方式。

1. Series

pandasSeries是一种带有标签索引的一维数据结构。
它可以表示任何一维带标签的数据,例如时间序列数据、运动员数据、股票价格等等。

pandasSeries由两个数组构成:一个是数据数组,它可以是numpy数组、列表、字典等;另一个是索引数组,它指定数据数组中每个元素的标签。

Series可以进行各种数学运算、逻辑运算和复制操作,可以轻松创建、操作和使用。
pandasSeries特别强大之处就是可以使用各种方法进行数据的操作、处理和分析,因此在数据分析、数据处理和科学计算方面非常有用。

常用的创建 Series有两种方式:

1.1 从列表创建

l = [78, 89, 95]
s = pd.Series(l)
s.head()

image.png
从列表可以直接创建出 Series,可以看出,与一般的一维数组相比,Series多了一列索引信息。
其实,除此之外,Series还有很多用于分析和统计的方法,后续我们再介绍。

索引默认是从0开始的数字,也可以在创建时设置有意义的索引名称。

l = [78, 89, 95]
s = pd.Series(l, index=["语文", "数学", "英语"])
s.head()

image.png

1.2 从字典创建

d = {"a": 78, "b": 89, "c": 95}
s = pd.Series(d)
s.head()

image.png
从字典创建Series时,会将字典的 key作为了索引。
修改索引不用 index参数,而是直接修改字典的 key

d = {"语文": 78, "数学": 89, "英语": 95}
s = pd.Series(d)
s.head()

image.png

2. Dataframe

pandasDataFrame是一个二维的数据结构,可以存储各种类型的数据,类似于Excel中的表格。
它由行和列组成,每一行和每一列都有一个索引值,可以通过索引值进行读写操作。

DataFrame支持许多操作,包括对数据的过滤、切片、排序、连接和聚合等。
它还可以从各种数据源(如CSV、SQL数据库和Excel)中读取数据,并将数据写入这些数据源。

pandas中,DataFrame可以使用字典、列表、Numpy数组、其他pandas数据框等构建。
DataFrame还有一些重要的属性和方法,例如headtaildescribe等,用于查看数据、统
计数据、随机抽样等。

除此之外,DataFrame还支持pandas中的许多高级操作,例如多重索引、透视表、重塑等。
这些功能使DataFrame成为数据分析中必不可少的工具。

2.1 从列表创建

l = [[78, 89, 95], [65, 84, 100]]
df = pd.DataFrame(l)
df.head()

image.png
从列表创建DataFrame之后,默认的索引列名称都是从0开始的数字。
也可以自定义DataFrame的索引名称和列名称,通过 indexcolumns参数。

l = [[78, 89, 95], [65, 84, 100]]
df = pd.DataFrame(l, index=["小明", "小红"], columns=["语文", "数学", "英语"])
df.head()

image.png

2.2 从字典创建

d = [{"语文": 78, "数学": 89, "英语": 95}, {"语文": 65, "数学": 84, "英语": 100}]
df = pd.DataFrame(d)
df.head()

image.png
字典的key作为列名称,索引不设置的话,默认还是从0开始的数字。

2.3 从 numpy 数组创建

import numpy as np

data = np.array([[78, 89, 95], [65, 84, 100]])
df = pd.DataFrame(data)
df.head()

image.png
numpy二维数组创建 DataFrame和直接从列表创建类似。
注意,这里只能从 numpy的二维数组创建,如果是维度更高的数组,创建时会出错。

data = np.array([[[78, 89, 95], [65, 84, 100]]])
df = pd.DataFrame(data)
df.head()

上面的 data是三维数组,执行上面的代码会有如下的错误信息:
image.png

3. 两种结构互相转换

pandas的两种核心结构之间是可以互相转换的,可以将 Series理解为 DataFrame的一列。

3.1 Series 到 DataFrame

对于一个 Series来说,可以理解成一列是索引,一列是数据。
Series转换为 DataFrame有多种方式,通过字典来中转是比较直观的一种方式。

d = {"语文": 78, "数学": 89, "英语": 95}
s = pd.Series(d)
s.head()

image.png
由前面的介绍可知,红色框内的是 Series的索引(即 s.index),
右边一列数字部分是Series的值(即s.values)。

df = pd.DataFrame({"学科": s.index, "分数": s.values})
df.head()

image.png
这样就转换成了一个 DataFrame,列名就是字典的key学科分数

3.2 DataFrame 到 Series

DataFrameSeries更加简单,DataFrame的每一列都可以转成 Series

l = [[78, 89, 95], [65, 84, 100]]
df = pd.DataFrame(l, index=["小明", "小红"], columns=["语文", "数学", "英语"])
df.head()

df["数学"]

image.png

type(df["数学"])

image.png

注意,DataFrame只有选择一列的时候才是一个 Series,如果选择多列的话,则还是一个 DataFrame

print(type(df[["数学", "语文"]]))
df[["数学", "语文"]]

image.png

4. 总结回顾

本篇主要介绍了pandas的两个核心数据结构 SeriesDataFrame
首先介绍了它们各自的创建方式,即从普通的python数据结构创建 SeriesDataFrame的常用方式。
然后也介绍了它们之间常用的互相转换方法。

SeriesDataFrame数据部分就是一维数组和二维数组,pandas不过是在数据部分之上封装了各种各样的管理和分析统计的函数。
然而正因为有了这些函数,才让pandas成为数据分析的一件利器。

本文关联的微信视频号短视频:
pandas02-核心数据结构.png

标签:head,--,Series,DataFrame,df,pd,数据结构,pandas
From: https://www.cnblogs.com/wang_yb/p/17380249.html

相关文章

  • CF1794D 题解
    一、题目描述:一个正整数$m$可以被唯一分解成$p_1^{e_1}\timesp_2^{e_2}\times...\timesp_k^{e_k}$的形式,其中$p_1,p_2,...,p_k$为互不相同的质数,$e_1,e_2,...,e_k$为正整数。定义一个可重集$f(m)$为$\{p_1,e_1,p_2,e_2,...,p_k,e_k\}$。现在给定正整数$......
  • 在linux上使用Qt开发动态库项目,怎么只生成一个so文件
     背景:在linux系统上,我们使用Qt开发动态库项目时,会默认生成四个文件:x.so 、x.so.1、x.so.1.0、x.so.1.0.0四个文件,只有一个真实的so库,剩下的三个都是链接文件。我们交付的时候,不可能发一堆文件出去,所以我们需要对Qt项目进行设置,保证输入的只有一个so文件......
  • 堆栈
    递归函数:直接或间接调用自己的函数就叫递归函数递归与迭代的区别:递归使用的是选择结构迭代使用的是循环结构栈的应用1、将中缀表达式转化为后缀表达式2、将后缀表达式转化为中缀表达式撤销、回退都是通过栈来实现的 栈不允许有遍历行为,但是可以求empty()和size()队列也......
  • 面向对象高级
    isinstance(obj,cls)和issubclass(sub,super)isinstance(obj,cls)检查是否obj是否是类cls的对象classFoo(object):passobj=Foo()isinstance(obj,Foo)issubclass(sub,super)检查sub类是否是super类的派生类classFoo(object):passclassBar(Foo):......
  • 本地代码提交到远程
    1.创建仓库: 2.git远程操作命令gitremote查看远程仓库(如果没有则看不到): 3.git远程连接,git远程操作命令: ......
  • C++面向对象
    面向对象三大特性封装:将具体的实现过程和数据封装成一个函数,只能通过接口访问,降低耦合性继承:子类继承父类的特征和行为,子类有父类非private方法或成员变量,子类可以对父类的方法进行重写,增强了类之间的耦合性,但是当父类中的成员变量、成员函数或者类本身被 final 关键字修饰时,......
  • 元类
    元类介绍什么是元类呢?一切源自于一句话:python中一切皆为对象。让我们先定义一个类,然后逐步分析classStanfordTeacher(object):school='Stanford'def__init__(self,name,age):self.name=nameself.age=agedefsay(self):print('%......
  • 二分查找——出现溢出问题
    算法描述:前提:有已排序数组A(假设已经做好)定义左边界L、右边界R,确定搜索范围,循环执行二分查找(3、4两步)获取中间索引M=Floor((L+R)/2)中间索引的值A[M]与待搜索的值T进行比较①A[M]==T表示找到,返回中间索引②A[M]>T,中间值右侧的其它元素都大于T,无需......
  • 解决Could not find a version that satisfies the requirement思路
    安装python第三方库的时候会提示报错缺少依赖库,报错如下:ERROR:Couldnotfindaversionthatsatisfiestherequirement 模块名(fromautomat)(fromversions:none)ERROR:Nomatchingdistributionfoundfor模块名下图为有具体提示缺少的依赖库的版本信息: 下图则为......
  • 工作提效___python实现测试用例统计
    一、工作中存在的问题:1、被测项目不断迭代增加新功能,功能模块越来越多,用例采用excel文档进行记录,每个sheet代表一级功能模块,每个sheet里面会有多个二级功能模块。由于功能模块较多,导致测试用例文档中存在几十个sheet页2、由于项目测试中,很多测试用例可以共用一条测试用例,为了减......