首页 > 其他分享 >数据分析2之Pandas的数据结构

数据分析2之Pandas的数据结构

时间:2024-09-05 10:15:56浏览次数:11  
标签:数据分析 index df Series DataFrame 索引 数据结构 Pandas Out

 

pandas百度介绍

pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。

Pandas [1]是python的一个数据分析包,最初由AQR Capital Management于2008年4月开发,并于2009年底开源出来,当时由专注于Python数据包开发的PyData开发团队继续开发和维护,属于PyData项目的一部分。Pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持。 Pandas的名称来自于面板数据(panel data)和python数据分析(data analysis)。panel data是经济学中关于多维数据集的一个术语,在Pandas中也提供了panel的数据类型

 

数据结构

Series:一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近。Series如今能保存不同种数据类型,字符串、boolean值、数字等都能保存在Series中。 Time- Series:以时间为索引的Series。 DataFrame:二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器。 Panel :三维的数组,可以理解为DataFrame的容器。 Panel4D:是像Panel一样的4维数据容器。 PanelND:拥有factory集合,可以创建像Panel4D一样N维命名容器的模块。

 

导入pandas:

 
import pandas as pd
from pandas import Series,DataFrame
import numpy as np
     

1、Series

 

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

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

1)Series的创建

 

两种创建方式:

(1) 由列表或numpy数组创建

默认索引为0到N-1的整数型索引
In [3]:          
#使用列表创建Series
Series(data=[1,2,3])
Series(data=[1,2,3],index=['a','b','c']) #显式索引
    Out[3]:
a    1
b    2
c    3
dtype: int64
In [4]:          
#使用numpy创建Series
s = Series(data=np.random.randint(0,100,size=(4,)),index=['a','b','c','d'])
s
    Out[4]:
a    87
b    13
c    78
d    78
dtype: int32
 

============================================

练习1:

使用多种方法创建以下Series,命名为s1:
语文 150
数学 150
英语 150
理综 300

============================================

 

2)Series的索引和切片

 

可以使用中括号取单个索引(此时返回的是元素类型),或者中括号里一个列表取多个索引(此时返回的是一个Series类型)。

(1) 显式索引:

- 使用index中的元素作为索引值
- 使用s.loc[](推荐):注意,loc中括号中放置的一定是显示索引

注意,此时是闭区间

In [14]:          
s[[1,2]]
    Out[14]:
b    92
c    94
dtype: int32
 

(2) 隐式索引:

- 使用整数作为索引值
- 使用.iloc[](推荐):iloc中的中括号中必须放置隐式索引

注意,此时是半开区间

In [ ]:          
     

切片:隐式索引切片和显示索引切片

 
  • 显示索引切片:index和loc
In [15]:          
s[0:3]
    Out[15]:
a    87
b    92
c    94
dtype: int32
 

3)Series的基本概念

 

可以通过shape,size,index,values等得到series的属性

In [6]:          
s.values
s.index
    Out[6]:
Index(['a', 'b', 'c', 'd'], dtype='object')
 

可以使用s.head(),tail()分别查看前n个和后n个值

In [19]:          
s.head(2)
s.tail(2)
    Out[19]:
c    94
d    10
dtype: int32
 

对Series元素进行去重

In [22]:          
s = Series(data=[1,1,2,2,3,3,3,4,5,6,7,7,8,9,9,9])
s.unique()
    Out[22]:
array([1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int64)
 

当索引没有对应的值时,可能出现缺失数据显示NaN(not a number)的情况

 
  • 使得两个Series进行相加
In [24]:          
s1 = Series(data=[1,2,3],index=['a','b','c'])
s2 = Series(data=[1,2,3],index=['a','b','d'])
s = s1 + s2
s
    Out[24]:
a    2.0
b    4.0
c    NaN
d    NaN
dtype: float64
 

可以使用pd.isnull(),pd.notnull(),或s.isnull(),notnull()函数检测缺失数据

In [26]:          
s.isnull()
s.notnull()
    Out[26]:
a     True
b     True
c    False
d    False
dtype: bool
In [33]:          
s
    Out[33]:
a    2.0
b    4.0
c    NaN
d    NaN
dtype: float64
In [35]:          
s[[True,True,False,False]]
s[s.notnull()]
    Out[35]:
a    2.0
b    4.0
dtype: float64
 

4)Series的运算

 

(1) + - * /

In [38]:          
s1.add(s2)
    Out[38]:
a    2.0
b    4.0
c    NaN
d    NaN
dtype: float64
 

(2) add() sub() mul() div() : s1.add(s2,fill_value=0)

In [ ]:          
     

(3) Series之间的运算

  • 在运算中自动对齐不同索引的数据
  • 如果索引不对应,则补NaN
 

============================================

练习3:

  1. 想一想Series运算和ndarray运算的规则有什么不同?

  2. 新建另一个索引包含“文综”的Series s2,并与s2进行多种算术操作。

============================================

In [ ]:          
     

2、DataFrame

 

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

  • 行索引:index
  • 列索引:columns
  • 值:values
 

1)DataFrame的创建

最常用的方法是传递一个字典来创建。DataFrame以字典的键作为每一【列】的名称,以字典的值(一个数组)作为每一列。

此外,DataFrame会自动加上每一行的索引。

使用字典创建的DataFrame后,则columns参数将不可被使用。

同Series一样,若传入的列与字典的键不匹配,则相应的值为NaN。

In [ ]:          
     
  • 使用ndarray创建DataFrame
In [39]:          
arr = np.array([1,2,3])
type(arr)
    Out[39]:
numpy.ndarray
In [41]:          
DataFrame(data=np.random.randint(0,100,size=(3,4)),index=['a','b','c'])
    Out[41]:
 0123
a 77 43 59 44
b 2 93 60 74
c 63 6 39 66
 

DataFrame属性:values、columns、index、shape

In [ ]:          
     

使用字典创建DataFrame:创建一个表格用于展示张三,李四,王五的java,python的成绩

In [73]:          
dic = {
    '张三':[11,22,33,44],
    '李四':[55,66,77,88]
}
df_score = DataFrame(data=dic,index=['语文','数学','英语','理综'])
     

============================================

练习4:

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

    张三  李四  
语文 150  0
数学 150  0
英语 150  0
理综 300  0

============================================

 

2)DataFrame的索引

 

(1) 对列进行索引

- 通过类似字典的方式  df['q']
- 通过属性的方式     df.q

可以将DataFrame的列获取为一个Series。返回的Series拥有原DataFrame相同的索引,且name属性也已经设置好了,就是相应的列名。

In [52]:          
df = DataFrame(data=np.random.randint(0,100,size=(3,4)),index=['a','b','c'],columns=['A','B','C','D'])
df
    Out[52]:
 ABCD
a 61 87 56 73
b 59 52 88 83
c 98 17 60 82
In [53]:          
#获取前两列
df[['A','B']]
    Out[53]:
 AB
a 61 87
b 59 52
c 98 17
 

(2) 对行进行索引

- 使用.loc[]加index来进行行索引
- 使用.iloc[]加整数来进行行索引

同样返回一个Series,index为原来的columns。

In [60]:          
df.iloc[[0,1]]
df.loc[['a','b']]
    Out[60]:
 ABCD
a 61 87 56 73
b 59 52 88 83
 

(3) 对元素索引的方法 - 使用列索引 - 使用行索引(iloc[3,1] or loc['C','q']) 行索引在前,列索引在后

In [63]:          
df.loc['a','D']
df.loc[['a','b'],'D']
    Out[63]:
a    73
b    83
Name: D, dtype: int32
 

切片:

 

【注意】 直接用中括号时:

  • 索引表示的是列索引
  • 切片表示的是行切片
In [64]:          
df
    Out[64]:
 ABCD
a 61 87 56 73
b 59 52 88 83
c 98 17 60 82
In [67]:          
#切出前两行
df['a':'b']
df[0:2]
    Out[67]:
 ABCD
a 61 87 56 73
b 59 52 88 83
 

在loc和iloc中使用切片(切列) : df.loc['B':'C','丙':'丁']

In [71]:          
df.loc[:,'A':'B']
    Out[71]:
 AB
a 61 87
b 59 52
c 98 17
 

Type Markdown and LaTeX: <span id="MathJax-Span-2" class="mrow"><span id="MathJax-Span-3" class="msubsup"><span id="MathJax-Span-4" class="mi">

标签:数据分析,index,df,Series,DataFrame,索引,数据结构,Pandas,Out
From: https://www.cnblogs.com/machangwei-8/p/18397833

相关文章

  • pandas数据处理库使用
    1、pandas简介Pandas(PanelData的缩写)是一个开源的Python数据处理库,它提供了高性能、易用的数据结构和数据分析工具,用于处理和分析结构化数据。Pandas的核心数据结构是DataFrame和Series,它们使数据的清理、转换、分析和可视化变得非常便捷。2、Series使用2.1、Series是一种类似一......
  • 6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)
    目录一.堆(Heap)的基本介绍二.堆的常用操作(以小根堆为例)三.实现代码3.1堆结构定义3.2向下调整算法*3.3初始化堆*3.4销毁堆3.4向上调整算法* 3.5插入数据3.6删除数据3.7返回堆顶数据四.下篇内容1.堆排序2.TopK问题一.堆(Heap)的基本介绍    ......
  • 数据结构——单链表查询、逆序、排序
    1、思维导图2、查、改、删算法//快慢排序法找中间值intmid_link(Link_t*plink){Link_Node_t*pfast=plink->phead;Link_Node_t*pslow=pfast;intm=0;while(pfast!=NULL){pfast=pfast->pnext;++m;if(m%......
  • 【数据结构】时间复杂度空间复杂度
    1、时间复杂度1.1大O渐进表示法大O符号(BigOnotation):是用于描述函数渐进行为的数学符号。推导大O阶方法:用常数1取代运行时间中的所有加法常数。在修改后的运行次数函数中,只保留最高阶项。如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶......
  • 【机器学习】嘿马机器学习(科学计算库)第8篇:Pandas,学习目标【附代码文档】
    本教程的知识点为:机器学习(常用科学计算库的使用)基础定位机器学习概述机器学习概述1.5机器学习算法分类1监督学习机器学习概述1.7Azure机器学习模型搭建实验Azure平台简介Matplotlib3.2基础绘图功能—以折线图为例1完善原始折线图—给图形添加辅助功能M......
  • 54.《数据结构绪论处解》
    结构和算法为程序的核心所在先谈数据和信息的关系之前计基中背诵理解的数据是信息的具体表现形式数据是信息的载体信息的符号化是数据是数据加工后的结果为了弄清五个XX概念我最烦的就是xiajiba的概念数据数据元素数据对象数据类型数据结构废话不多说上图语......
  • 数据结构--链表
    单向链表链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。相较于数组,链表有以下优点:逻辑结构(1)链表采用动态内存分配的方式,在内存中不连续(2)支持动态增加或者删除元素(3)需要时可以使用malloc或者new来申请内存,不用......
  • 【Python篇】详细学习 pandas 和 xlrd:从零开始
    文章目录详细学习`pandas`和`xlrd`:从零开始前言一、环境准备和安装1.1安装`pandas`和`xlrd`1.2验证安装二、`pandas`和`xlrd`的基础概念2.1什么是`pandas`?2.2什么是`xlrd`?三、使用`pandas`读取Excel文件3.1读取Excel文件的基础方法代码示例:读取......
  • 算法与数据结构——AVL树(平衡二叉搜索树)
    AVL树在“二叉搜索树”章节提到,在多次插入和删除操作后,二叉搜索树可能退化为链表。在这种情况下,所有操作的时间复杂度将从O(logn)劣化为O(n)。如下图,经过两次删除节点操作,这棵二叉搜索树便会退化为链表再例如,下图所示的完美二叉树中插入两个节点后,树将严重向左倾斜,查找操作的......
  • 深度学习-用神经网络NN实现足球大小球数据分析软件
    文章目录前言一、数据收集1.1特征数据收集代码实例二、数据预处理清洗数据特征工程:三、特征提取四、模型构建五、模型训练与评估总结前言预测足球比赛走地大小球(即比赛过程中进球总数是否超过某个预设值)的深度学习模型是一个复杂但有趣的项目。这里,我将概述一个......