当前位置: 首页 > article >正文

3.Pandas库

引入pandas库:import  pandas as pd

一.介绍:

  • pandas数据分析处理库

<1>pandas和numpy区别:

numpypandas
数据结构主要的数据结构是ndarray(N 维数组),它是一个均匀的、多维的数组对象,所有元素必须是相同的数据类型,例如都是整数、浮点数或布尔值等。有两种主要的数据结构,SeriesDataFrameSeries可以看作是一维的带标签的数组,而DataFrame是二维的表格型数据结构,类似于电子表格或 SQL 表,它由行和列组成,每列可以是不同的数据类型。
功能特点侧重于数值计算,提供了大量的数学函数和操作,如线性代数运算、傅里叶变换、随机数生成等。它在处理大规模的数值数据时效率非常高,是许多科学计算和数据分析库的基础。主要用于数据处理和分析,提供了丰富的数据清洗、转换、合并、分组等功能。它擅长处理带有标签的数据,能够方便地对数据进行筛选、排序、填充缺失值等操作,并且支持多种数据输入输出格式,如 CSV、Excel 等。
索引方式通过整数索引或布尔索引来访问和操作数组中的元素。可以使用单个索引值、切片或布尔数组来选择特定的元素或子集。SeriesDataFrame都支持基于标签的索引,也支持整数位置索引。可以使用标签值、标签切片、布尔条件等多种方式进行索引和选择数据,还可以使用lociloc属性来明确指定基于标签或位置的索引操作。
数据对齐在进行数组运算时,不会自动进行数据对齐。如果两个数组形状不匹配,可能会触发广播机制,但这主要是基于形状的规则进行的,而不是基于标签或索引。在进行运算时,会自动根据索引进行数据对齐。对于SeriesDataFrame,会根据行标签和列标签来匹配数据,确保相应的元素进行正确的运算,这使得在处理具有不同索引或标签的数据时更加方便和安全。
可视化

本身并不直接提供可视化功能,主要专注于数据的数值计算和存储。

与可视化库(如matplotlibseaborn等)有很好的集成,可以方便地对数据进行可视化展示,例如绘制折线图、柱状图、饼图等。

<2>read_csv读取文件中数据:

1.head()读取前几条:

2.info()返回当前信息:

 3.返回索引(index)、列名(columns):

4.values打印所有值:

二.读取数据:

<1>指定列:

1.一列:

2.两列:

<2>设定索引:

<3>按某一特性查找:

<4>运算:

  • describe() 方法通常会返回以下统计信息:
    • count:非缺失值的数量。
    • mean:平均值。
    • std:标准差。
    • min:最小值。
    • 指定的分位数(如 25%、50%、75%)
    • max:最大值。

【注意】对于非数值型数据(如字符串、对象类型),describe() 方法会返回以下统计信息:

  • count:非缺失值的数量。
  • unique:唯一值的数量。
  • top:出现频率最高的值。
  • freq:出现频率最高的值的频数。

<5>loc和iloc:

 1.区别:

DataFrame.loc[row_label, column_label]
DataFrame.iloc[row_label, column_label]
  • row_label:行标签,可以是单个标签、标签列表、标签切片或布尔数组。
  • column_label:列标签,同样可以是单个标签、标签列表、标签切片或布尔数组。
索引方式切片规则
loc使用标签进行索引,适用于根据行和列的名称来选取数据。切片是包含边界的,例如 df.loc['A':'B'] 会选取索引为 'A' 和 'B' 的行。
iloc使用整数位置进行索引,适用于根据数据的位置(行号和列号)来选取数据。切片是不包含边界的,例如 df.iloc[0:2] 会选取索引为 0 和 1 的行,不包括索引为 2 的行。

2.代码演示:

  • 查找admin年龄 以及admin~ss所有信息:

  • 赋值 

  • 找Fare>40的人的信息: 

三.常用操作:

<1>创建二维数据结构:

  • DataFrame({}):二维的数据结构

<2>排序:

1.sort_values:

1.1.格式:
  • 语法:DataFrame.sort_values(by, axis = 0, ascending=True, inplace=False, kind='quicksort', na_position='last')
    • by:指定排序的依据,可以是一个列名(字符串)或者列名的列表。例如,如果df是一个DataFramedf.sort_values(by = 'column_name')会按照column_name列的值进行排序。如果是多个列,像df.sort_values(by=['col1','col2']),会先按照col1列排序,当col1列的值相同时,再按照col2列排序。
    • axis:默认值为 0,表示按照行索引排序。如果设置为 1,则按照列名排序,不过这种用法相对较少。
    • ascending:布尔值或布尔值列表。如果是True(默认值),则按照升序排序;如果是False,则按照降序排序。当by是列名列表时,ascending也可以是一个长度相同的布尔值列表,例如df.sort_values(by=['col1','col2'], ascending=[True,False])表示col1列升序排序,col2列降序排序。
    • inplace:默认值为False。如果设置为True,则会直接在原始的DataFrame上进行排序,函数没有返回值。如果设置为False(推荐),函数会返回一个排序后的DataFrame副本,而原始DataFrame不变。
    • kind:指定排序算法,有'quicksort'(快速排序,默认)、'mergesort'(归并排序)和'heapsort'(堆排序)。一般情况下,默认的快速排序就足够了,但在某些特殊情况下,比如需要保证排序的稳定性时,可以选择mergesort
    • na_position:用于指定缺失值(NaN)的位置。默认是'last',即缺失值排在最后;也可以设置为'first',让缺失值排在最前面。
1.2.两列排序:

1.3.一列排序:

<3>去除重复值:

1.drop_duplicates:

1.1.格式:
  • 语法:DataFrame.drop_duplicates(subset=None, keep='first', inplace=False, ignore_index=False)
    • subset:可选参数,用于指定判断重复的列。可以是列名或者列名的列表。例如,df.drop_duplicates(subset = 'column_name')会根据column_name列的值来判断行是否重复。如果是多个列,如df.drop_duplicates(subset=['col1','col2']),只有当col1col2列的值组合完全相同时,才会判定为重复行。
    • keep:指定保留哪一个重复行。有三个可选值:'first'(默认),保留第一次出现的行,删除后面的重复行;'last',保留最后一次出现的行,删除前面的重复行;False,删除所有重复行,只保留不重复的行。
    • inplace:默认值为False。如果设置为True,会直接在原始的DataFrame上进行操作,函数没有返回值。如果设置为False(推荐),函数会返回一个去除重复行后的DataFrame副本,原始DataFrame不变。
    • ignore_index:默认值为False。如果设置为True,返回的DataFrame的索引会被重新编号,从 0 开始按顺序排列。

<4>合并同类项:

1.app:

1.1.格式:
  • 对于Series,语法为Series.apply(func, convert_dtype=True, args=(), **kwargs)
    • 返回一个新的Series,其长度与原Series相同,元素是原Series元素经过func函数处理后的结果。
  • 对于DataFrame,语法为DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), **kwargs)
    • 当应用于DataFrame时:
      • 如果axis = 0,返回一个Series,其索引为原DataFrame的列名,值是每列经过func函数处理后的结果。
      • 如果axis = 1,返回一个Series,其索引为原DataFrame的行索引,值是每行经过func函数处理后的结果。
  • 其中func是要应用的函数。在DataFrame中,axis参数用于指定应用函数的轴,axis = 0表示按列应用,axis = 1表示按行应用。

 2.map:

2.1.格式:
  • Series.map(arg, na_action=None)
    • 其中arg可以是一个函数、一个字典或者一个Seriesna_action参数用于指定在遇到缺失值(NaN)时的操作,默认是None,也可以是'ignore'

<5>新列操作:

1.assign添加新列

 2.drop去掉指定列:

3.replace替换指定值:

4.cut分割成组:

4.1.codes映射:

4.2.统计数量: 
(1)方式一:

(2)方式二:

 5.isnull判断是否有缺失值:

传入的是一个嵌套列表 [range(3),[0,np.nan,0],[0,0,np.nan],range(3)],其中包含 4 个元素,每个元素代表数据框的一行。

  • range(3)range(3) 会生成一个包含 0、1、2 的可迭代对象,在创建数据框时会被转换为列表 [0, 1, 2]
  • [0,np.nan,0]:这是一个包含一个缺失值的列表,np.nan 是 numpy 库中用于表示缺失值(Not a Number)的特殊值。
  • [0,0,np.nan]:同样是一个包含缺失值的列表。
 5.2.按照行/列判断缺失值:
5.3.fillna填充缺失:

 

四.groupby操作:

 

五.数值运算:

<1>基础运算:

<2>cov协方差:

1.协方差好处:

协方差是衡量两个变量的总体误差的统计量,它可以帮助我们了解两个变量之间的变化趋势是否一致。

2.应用:

  • DataFrame,它会计算各列之间的协方差矩阵;
  • 对于Series,它会计算该序列与另一个序列之间的协方差。

<3>corr相关系数:

1.应用:

  • corr()方法可用于DataFrameSeries对象。
    • 当应用于DataFrame时,它会计算数据框中各列之间的相关性;
      • 返回一个包含各列之间相关性的DataFrame,对角线元素为 1(因为每列与自身的相关性为 1)。
    • 当应用于Series时,它会计算该序列与另一个序列之间的相关性。
      • 返回一个表示两个序列之间相关性的标量值。

<4>value_counts()不同值的出现次数:

【注意】默认降序,若想要升序,在括号内填写参数:ascending=True;若在参数中指定bins=数,则会自动分组。

2.count()统计总数:

六.对象的增删改查:

<1>Series结构的增删改查:

一行或一列

(1)查:

(2)修改:

1.replace改值:

2.rename改索引:

(3)concat增加:

(4)删除:

1.删单del个:

2.删多drop个:

<2>DataFrame结构的增删改查:

七.merge操作:

<1>‘一阶’合并:

<2>‘二阶’合并:

<3>‘阶’值有区别:

 八.设置全局变量:

API 参考 — pandas 2.2.3 文档https://pandas.pydata.org/pandas-docs/stable/reference/index.htmlhttps://pandas.pydata.org/pandas-docs/stable/reference/index.htmlhttps://pandas.pydata.org/pandas-docs/stable/reference/index.htmlpandas.set_option — pandas 2.2.3 documentationhttps://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.set_option.html#pandashttps://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.set_option.html#pandashttps://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.set_option.html#pandas

<1>max_rows行:

<2>max_columns列:

<3>.max_colwidth字符串长:

<4>precision小数精度:

九.pivot操作:

  • index:指定作为新 DataFrame 行索引的列名,在你的代码里是 'Category',意味着 example 数据框中 Category 列的值会成为新数据框的行索引。
  • columns:指定作为新 DataFrame 列索引的列名,这里是 'Month',也就是 example 数据框中 Month 列的值会成为新数据框的列名。
  • values:指定用于填充新 DataFrame 单元格的列名,即 'Amount',表示 example 数据框中 Amount 列的值会填充到新数据框对应的位置。

<1>例题:

(1)性别不同在不同船舱等级:

(2) 性别、船舱不同的最大花销:     

(3)不同性别在不同船舱人数:

(4)船舱等级获救情况:

(5)查看未成年获救情况:

<2>crosstab和pivot区别:

crosstabpivot
功能用途主要用于创建列联表,用于展示两个或多个分类变量之间的频数关系。它可以方便地统计不同类别组合下的出现次数,常用于数据分析中的统计检验和探索性分析,以揭示变量之间的相关性。侧重于将长格式(long - format)的数据转换为宽格式(wide - format)。长格式数据通常每一行代表一个观测值,而宽格式数据则将某些变量的不同取值作为列,使得数据更适合进行某些类型的分析和可视化。
输入参数通常接受多个一维数组(如 Series 或 list)作为输入,分别代表不同的分类变量。它还可以接受 values 参数用于指定需要聚合的值列,以及 aggfunc 参数用于指定聚合函数。通常接受一个 DataFrame 作为输入,并通过 indexcolumns 和 values 参数来指定如何重塑数据。index 用于指定行索引,columns 用于指定列索引,values 用于指定填充单元格的值。
import pandas as pd

# 创建示例数据
gender = ['Male', 'Female', 'Male', 'Female']
smoker = ['Yes', 'No', 'No', 'Yes']

# 使用 crosstab 创建列联表
result = pd.crosstab(gender, smoker)
print(result)

处理重复值的能力对于重复的分类组合,crosstab 会自动统计其出现的频数,无需额外处理。如果 (index, columns) 组合存在重复值,pivot 方法会抛出 ValueError 异常。此时需要使用 pivot_table 方法,它可以处理重复值并通过 aggfunc 参数指定聚合方式,如求和、均值等。
import pandas as pd

# 创建示例数据
gender = ['Male', 'Female', 'Male', 'Female']
smoker = ['Yes', 'No', 'No', 'Yes']

# 使用 crosstab 创建列联表
result = pd.crosstab(gender, smoker)
print(result)

默认行为

默认情况下,crosstab 计算的是分类变量组合的频数。 

pivot 直接将指定的 values 列中的值填充到新的数据结构中,不进行任何聚合操作。

十.时间操作:

<1>时间挫:

<2>相关处理时间操作:

1.Timestamp和to_datetime区别和相同:

Timestampto_datetime
相同点
  • 所属库与用途:二者都属于 pandas 库,且主要用于处理时间相关的数据。它们都能将各种时间表示形式转换为 pandas 可以识别和处理的时间格式,方便进行后续的时间序列分析,例如按时间范围筛选数据、重采样等操作。
  • 兼容性:处理后的结果在 pandas 的时间序列操作中具有很好的兼容性,可以无缝应用于各种时间相关的方法和函数。

不同点

功能
  • Timestamp 主要用于表示单个时间戳,是一个具体的时间点。它类似于 Python 标准库中的 datetime.datetime 对象,但在 pandas 中有更多的功能扩展。
  • 例如,你可以使用 Timestamp 精确表示 “2024 年 10 月 1 日 12 点 30 分” 这个特定的时刻。
  • to_datetime 是一个更通用的函数,它可以处理多种输入类型,包括单个时间字符串、时间字符串列表、Series 或 DataFrame 中的时间列等,并将它们转换为 pandas 的 datetime 类型。
  • 它更侧重于批量处理时间数据,将不同格式的时间数据统一转换为标准的时间格式。
使用方式

创建 Timestamp 对象时,通常是传入一个具体的时间表示,如字符串、整数等。

当使用 to_datetime 时,可以传入单个时间字符串、多个时间字符串组成的列表或 Series 对象等。

返回值

返回的是一个 pandas.Timestamp 对象,表示单个具体的时间点。

如果输入是单个时间字符串,返回一个 Timestamp 对象;如果输入是列表、Series 或 DataFrame 列,返回 DatetimeIndex 或 Series(包含 datetime 类型的数据)。

2.相关函数用法展示:


http://www.kler.cn/a/533544.html

相关文章:

  • JAVA_内部类
  • 【数据分析】豆瓣电影Top250的数据分析与Web网页可视化(numpy+pandas+matplotlib+flask)
  • Rust 所有权特性详解
  • 【Rust自学】16.4. 通过Send和Sync trait来扩展并发
  • 请解释 Java 中的 IO 和 NIO 的区别,以及 NIO 如何实现多路复用?
  • 【大数据技术】教程03:本机PyCharm远程连接虚拟机Python
  • oracle ORA-27054报错处理
  • 深入理解和使用定时线程池ScheduledThreadPoolExecutor
  • 智能编码在前端研发的创新应用
  • python爬取网页数据为json该用什么方法?
  • 验证工具:GVIM和VIM
  • java s7接收Byte字节,接收word转16位二进制
  • 当大模型遇上Spark:解锁大数据处理新姿势
  • docker Error response from daemon: Get “https://registry-1.docker.io/v2/ 的问题处理
  • AI工具如何辅助写文章(科研版)
  • 无缝切换?从Vue到React
  • PostIn简明安装教程(入门级)
  • 企业四要素如何用Java进行调用
  • 【多线程】线程池核心数到底如何配置?
  • 如何设置Jsoup爬虫的User-Agent?
  • 拉取本地的 Docker 镜像的三种方法
  • 解决DeepSeek服务器繁忙问题:本地部署与优化方案
  • windows下玩转vllm:vllm简介
  • 【怎么用系列】短视频戒除-1-对推荐算法进行干扰
  • 怎么让PDF文档变小一点?
  • 求分数序列和(信息学奥赛一本通-1078)