3.Pandas库
引入pandas库:import pandas as pd
一.介绍:
- pandas数据分析处理库
<1>pandas和numpy区别:
numpy | pandas | |
数据结构 | 主要的数据结构是ndarray (N 维数组),它是一个均匀的、多维的数组对象,所有元素必须是相同的数据类型,例如都是整数、浮点数或布尔值等。 | 有两种主要的数据结构,Series 和DataFrame 。Series 可以看作是一维的带标签的数组,而DataFrame 是二维的表格型数据结构,类似于电子表格或 SQL 表,它由行和列组成,每列可以是不同的数据类型。 |
功能特点 | 侧重于数值计算,提供了大量的数学函数和操作,如线性代数运算、傅里叶变换、随机数生成等。它在处理大规模的数值数据时效率非常高,是许多科学计算和数据分析库的基础。 | 主要用于数据处理和分析,提供了丰富的数据清洗、转换、合并、分组等功能。它擅长处理带有标签的数据,能够方便地对数据进行筛选、排序、填充缺失值等操作,并且支持多种数据输入输出格式,如 CSV、Excel 等。 |
索引方式 | 通过整数索引或布尔索引来访问和操作数组中的元素。可以使用单个索引值、切片或布尔数组来选择特定的元素或子集。 | Series 和DataFrame 都支持基于标签的索引,也支持整数位置索引。可以使用标签值、标签切片、布尔条件等多种方式进行索引和选择数据,还可以使用loc 和iloc 属性来明确指定基于标签或位置的索引操作。 |
数据对齐 | 在进行数组运算时,不会自动进行数据对齐。如果两个数组形状不匹配,可能会触发广播机制,但这主要是基于形状的规则进行的,而不是基于标签或索引。 | 在进行运算时,会自动根据索引进行数据对齐。对于Series 和DataFrame ,会根据行标签和列标签来匹配数据,确保相应的元素进行正确的运算,这使得在处理具有不同索引或标签的数据时更加方便和安全。 |
可视化 | 本身并不直接提供可视化功能,主要专注于数据的数值计算和存储。 | 与可视化库(如matplotlib 、seaborn 等)有很好的集成,可以方便地对数据进行可视化展示,例如绘制折线图、柱状图、饼图等。 |
<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
是一个DataFrame
,df.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'])
,只有当col1
和col2
列的值组合完全相同时,才会判定为重复行。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
可以是一个函数、一个字典或者一个Series
。na_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()
方法可用于DataFrame
和Series
对象。- 当应用于
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区别:
crosstab | pivot | |
功能用途 | 主要用于创建列联表,用于展示两个或多个分类变量之间的频数关系。它可以方便地统计不同类别组合下的出现次数,常用于数据分析中的统计检验和探索性分析,以揭示变量之间的相关性。 | 侧重于将长格式(long - format)的数据转换为宽格式(wide - format)。长格式数据通常每一行代表一个观测值,而宽格式数据则将某些变量的不同取值作为列,使得数据更适合进行某些类型的分析和可视化。 |
输入参数 | 通常接受多个一维数组(如 Series 或 list )作为输入,分别代表不同的分类变量。它还可以接受 values 参数用于指定需要聚合的值列,以及 aggfunc 参数用于指定聚合函数。 | 通常接受一个 DataFrame 作为输入,并通过 index 、columns 和 values 参数来指定如何重塑数据。index 用于指定行索引,columns 用于指定列索引,values 用于指定填充单元格的值。 |
| ||
处理重复值的能力 | 对于重复的分类组合,crosstab 会自动统计其出现的频数,无需额外处理。 | 如果 (index, columns) 组合存在重复值,pivot 方法会抛出 ValueError 异常。此时需要使用 pivot_table 方法,它可以处理重复值并通过 aggfunc 参数指定聚合方式,如求和、均值等。 |
| ||
默认行为 | 默认情况下, | pivot 直接将指定的 values 列中的值填充到新的数据结构中,不进行任何聚合操作。 |
十.时间操作:
<1>时间挫:
<2>相关处理时间操作:
1.Timestamp和to_datetime区别和相同:
Timestamp | to_datetime | ||
---|---|---|---|
相同点 |
| ||
不同点 | 功能 |
|
|
使用方式 | 创建 | 当使用 | |
返回值 | 返回的是一个 | 如果输入是单个时间字符串,返回一个 |