数据分析 - Pandas模块
pandas是以NumPy为基础进行设计的,因此pandas不仅能与其他大多数模块兼容,而且还能借力NumPy模块强大的计算能力,因此,在数据分析中pandas和NumPy这两个模块经常是一起使用的。
为了数据分析的需要,pandas既不使用Python已有的内置数据结构,也不使用其他库的数据结构,而是专门设计了两种新型的数据结构。
使用这两种数据结构管理与SQL关系数据库和Excel工作表具有类似特征的数据会非常方便。由于pandas最初是作为金融数据分析工具而开发出来的,因此,pandas为时间序列分析提供了很好的支持。根据开发pandas时提出的需求,pandas的基本功能如下:
- 具备按轴自动或显式数据对齐功能的数据结构。这可以防止许多由于数据未对齐以及来自不同数据源(索引方式不同)的数据而导致的常见错误。
- 集成时间序列功能。
- 既能处理时间序列数据也能处理非时间序列数据的数据结构。
- 数学运算和约简(比如对某个轴求和)可以根据不同的元数据(轴编号)执行。
- 灵活处理缺失数据。
- 合并及其他出现在常见数据库(例如基于SQL)中的关系型运算。
数据结构
pandas的数据结构中有两大核心,分别是Series与DataFrame。其中Series是一维数组,它和Numpy中的一维数组类似。这两种一维数组与Python中的基本数据结构List相近,Series可以保存多种数据类型的数据,如布尔值、字符串、数字类型等。DataFrame是一种二维的表格形式的数据结构,它类似于Excel表格。
- Series 是一种类似于一维数组的对象,它由一组数据(各种 Numpy 数据类型)以及一组与之相关的数据标签(即索引)组成。
- DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。
安装
pip install pandas
Series
Pandas Series 类似表格中的一个列(column),类似于一维数组,可以保存任何数据类型。
- 索引:每个 Series 都有一个索引,它可以是整数、字符串、日期等类型。如果没有显式指定索引,Pandas 会自动创建一个默认的整数索引
- 数据类型: Series 可以容纳不同数据类型的元素,包括整数、浮点数、字符串等
pandas.Series( data, index, dtype, name, copy):可以使用 pd.Series() 构造函数创建一个 Series 对象,传递一个数据数组(可以是列表、NumPy 数组等)和一个可选的索引数组
-
data:一组数据(ndarray 类型或者列表,字典等等)。
-
index:数据索引标签,如果不指定,默认从 0 开始。
-
dtype:数据类型,默认会自己判断。
-
name:设置名称。
-
copy:拷贝数据,默认为 False。
-
使用数组创建
-
使用字典创建:字典中的一个键与值的映射关系,可以被看成是Series对象中的索引值到数据值的一个映射,因此,可以将字典直接转换为Series对,也可以将Series对象转换成字典(
pd.Series.to_dict
)
-
使用列表创建
数组创建的series是动态的:即数组改变,series也会随之改变
import pandas as pd import numpy as np '''数组''' print('数组:') mynumpy = np.array([1,2,3,4]) series_arr = pd.Series(mynumpy) print(series_arr) mynumpy[1]=22 print('\n',series_arr) '''字典''' print('\n','字典:') mydict = {'jack':18,'rose':19,'joe':17} series_dict = pd.Series(mydict) print(series_dict) mydict.update({'jace':180}) print('\n',series_dict) '''列表''' print('\n','列表:') mylist = ['a','b','c'] series_list = pd.Series(mylist) print(series_list) mylist[0]='aa' print('\n',series_list)
-
Series索引
-
设置索引
-
索引访问
-
切片访问
Series元素操作
-
元素赋值
-
元素筛选
-
算数运算和数学函数(可以直接调用numpy库来处理)
-
去重
-
统计个数
-
统计每个元素的个数
-
判断一列元素是否存在,返回的是布尔类型series
Series对象操作
在Series对象之间进行运算时,Series能够通过识别标签对齐不一致的数据。这就是Series运算时的自动对齐功能。
通过上述计算得到了一个新Series对象,其中只对标签相同的元素求和,其他只属于各自的Series对象的标签也被添加到新对象中,只不过它们的值为NaN
DataFrame
DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)
- 列和行: DataFrame 由多个列组成,每一列都有一个名称,可以看作是一个 Series。同时,DataFrame 有一个行索引,用于标识每一行
- 二维结构: DataFrame 是一个二维表格,具有行和列。可以将其视为多个 Series 对象组成的字典。
- 列的数据类型: 不同的列可以包含不同的数据类型,例如整数、浮点数、字符串等。
pandas.DataFrame( data, index, columns, dtype, copy)
-
data:一组数据(ndarray、series, map, lists, dict 等类型)。
-
index:索引值,或者可以称为行标签
-
columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) 。
-
dtype:数据类型。
-
copy:拷贝数据,默认为 False。
-
使用列表创建
-
使用字典创建
没有数据部分用NaN代替
- 使用数组创建
-
DataFrame属性
-
行属性,列属性
-
获取所有数据
-
获取某一列数据,两种写法够可以
-
通过
iloc
属性获取某一行数据,指定index也不可以,只能通过该属性,可以切片
DataFrame操作
-
指定行索引和列索引标签
-
添加元素
-
添加一列元素
-
添加一行元素
-
-
修改元素
-
删除元素
-
筛选元素
-
判断元素是否存在
-
转置,和nupmy类似
NaN
一般来讲,NaN表示数据有问题,必须对其进行处理,尤其是在数据分析时。从某些数据源抽取数据时遇到了问题,甚至是数据源缺失数据时,往往会产生这类数据。另外,在执行计算和函数运算时也会遇到这类数据。
可以用dropna()
这个方法筛选出正常的值;
isna()
用来判断所在行是否有NaN,(Series产生一个布尔值的Series;DataFrame产生一个布尔值的DataFrame)
Pandas索引对象
pandas的两种数据结构Series和DataFrame都是具备索引的。在创建pandas的两种数据结构时,可以通过选项参数index指定标签或行索引。pandas的索引对象负责管理轴标签和其他元数据(如轴名称等)。在创建Series或DataFrame的时候,所用到的任何数组或其他序列的标签都会被转换成一个Index对象。
与pandas数据结构(Series和DataFrame)中其他元素不同的是,Index对象是不可修改的(Immutable),一旦声明,它就不能改变。当不同数据结构共用Index对象时,该特性能够保证它的安全。
Index对象的属性和方法
- 获取Index对象
其他的方法如:插入,删除,计算并集等等和list方法类似
- 重置索引
层级索引
- 创建层级索引
-
Series:长度必须一致,否知报错
-
Dataframe:显式不写了
-
Series和DataFrame的区别和联系
区别
- series,只是一个一维数据结构,它由index和value组成。
- dataframe,是一个二维结构,除了拥有index和value之外,还拥有column。
联系
dataframe由多个series组成,无论是行还是列,单独拆分出来都是一个series。
数据读取和保存
读取
-
省略读取
-
to_string() 用于返回 DataFrame 类型的数据
-
读取前几行
-
读取末尾几行
-
读取表格信息
保存导出
-
保存为csv文件
-
保存为excel文件
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性