欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > 数据可视化--pandas库

数据可视化--pandas库

2025/12/8 8:11:35 来源:https://blog.csdn.net/The_SkyUzi/article/details/147356760  浏览:    关键词:数据可视化--pandas库

pandas库学习

文章目录

  • pandas库学习
  • 前言
  • Series
    • 创建series类对象
    • 获取索引和数据
  • DataFrame对象
    • 构造方法
      • 传入字典创建 DataFrame
      • 传入二维数组(ndarray)创建 DataFrame
      • 自定义行索引和列索引创建 DataFrame
    • 操作方法
      • 获取一列数据
      • 查看摘要信息
  • 索引和切片操作
    • 索引对象
      • Index类的子类
      • 特性
      • 重置索引
    • 通过索引和切片获取数据
      • Series的索引和切片操作
      • DataFrame的索引和切片操作
      • 通过loc和iloc属性获取数据
  • 总结


前言

随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


Series

series是类似于一维数组的数据结构, 主要由一组数据和与之相关的索引两部分组成, 其中数据可以是任意类型, 比如整数、字符串、浮点数、python对象等。
在这里插入图片描述

创建series类对象

首先要导入pandas库:

import pandas as pd

通过向series构造方法中传入一个列表创建一个Series对象

ser_obj = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
ser_obj

可传参数:

  • data表示数据,它的值可以是ndarray对象、列表、字典、标量等。
  • index表示索引,他的值必须是可散列的,且于数据的长度相同。如果没有传入index参数,默认从0开始递增;如果data参数的值是字典类型且index参数的
obj = {"name": "John","age": 30,"city": "New York"
}
ser_obj = pd.Series(data=obj)
ser_obj

在这里插入图片描述
当创建Series类的对象时,也可以显式地给数据指定标签索引

ser_obj = pd.Series(data=['Python', 'C', 'Java', 'JavaScript', 'PHP', 'R'], 
index=['a', 'b', 'c', 'd', 'e', 'f'])

虽然我们现在只能看到用户指定的标签索引,但是系统仍然会生成一组位置索引,只是位置索引是隐藏的。

获取索引和数据

通过index属性获取Series类对象的索引

ser_obj.index

通过values属性获取Series类对象的数据

ser_obj.values

二者皆为可迭代对象,皆可循环通过索引访问。

DataFrame对象

DataFrame是一个类似于二维数组或表格的数据结构,它通过行列的形式组织数据,每列数据可以是不同的数据类型。与Series相比,DataFrame也是由索引和数据两部分组成,不同的是,DataFrame既有行索引又有列索引
在这里插入图片描述

DataFrame可以看作多个Series类对象的组合,它里面每一列数据是一个Series类的对象,这些对象之间共用同一个行索引

构造方法

DataFrame(data=None, index=None, columns=None, dtype=None, copy=None)
  • data 数据,该参数可以接收ndarray对象、列表、字典或其他DataFrame类的对象。
  • index 行索引,如果没有传入该参数,则默认会自动生成0~N的整数。
  • columns 列索引。如果没有传入索引参数,则默认会自动生成0~N的整数。

传入字典创建 DataFrame

data = {'name': ['Alice', 'Bob', 'Charlie'],'age': [25, 30, 35]}
df = pd.DataFrame(data)
print(df)

在这里插入图片描述

在这个例子中,data 是一个字典,键 ‘name’ 和 ‘age’ 成为 DataFrame 的列名,对应的值列表分别构成了这两列的数据。运行代码会输出一个包含两列(name 和 age)和三行数据的 DataFrame 。

传入二维数组(ndarray)创建 DataFrame

import numpy as np
import pandas as pdarr = np.array([[1, 2, 3],[4, 5, 6]])
df = pd.DataFrame(arr)
print(df)

在这里插入图片描述

这里没有设置行、列索引,所以默认值从0开始递增。

自定义行索引和列索引创建 DataFrame

data = {'math': [85, 90], 'english': [92, 88]}
df = pd.DataFrame(data, index=['student1','student2'], columns=['math', 'english'])
print(df)

在这里插入图片描述

操作方法

获取一列数据

如果想要从DataFrame类的对象中获取一列数据,则可以通过访问属性的方式获取,返回的结果是一个Series类的对象

result = df_obj.No2
result = df_obj['No_2']
result

如果索引的标签名称中有一些特殊的字符,比如空格、下画线等,那么通过访问属性的方式获取数据显得不太合适了,这时可以使用索引获取数据

查看摘要信息

df_obj.info()

在这里插入图片描述

索引和切片操作

索引对象

Index类的子类

在pandas中,无论是位置索引还是标签索引,它们都属于Index类的对象,也就是索引对象。Index类是一个基类,它派生了很多子类,每个子类代表不同形式的索引。

说明示例
RangeIndex位置索引(默认)0、1、2、3……N
Int64Index整数索引1、-5、8、10、-9
Float64Index浮点数索引-1.0、-5.5、10.2、9.8、6.3
DatetimeIndex时间戳索引2022-11-25 17:00:00、2022-11-28 17:00:00、2022-12-25 17:00:00
PeriodIndex时间间隔索引2022-11-25 00:00:00、2022-11-25 01:00:00、2022-11-25 02:00:00……
MultiIndex分层索引a a、a b、a c、b d、b e

特性

不可变性
索引对象一旦创建是不可以被修改的,也就是说,索引的值是固定不变的,这样做能够维护从索引到数据的唯一映射关系,并保证Series或DataFrame中数据的安全

ser_obj = pd.Series(range(5), index=['a', 'b', 'c', 'd', 'e'])
ser_index['2'] = 'cc'

TypeError: Index does not support mutable operations

可重复性
索引对象的值是可以重复的

ser_obj = pd.Series(range(5), index=['a', 'a', 'c', 'd', 'e'])
ser_index = ser_obj.index
ser_index

检索唯一性

ser_index.is_unique

在这里插入图片描述

重置索引

重置索引是指重新为对象设定索引,以构建一个符合新索引的对象
reindex()方法会对Series类或DataFrame类对象的原索引和新索引进行匹配,如果新索引跟原索引的值相同,则新索引对应的数据会被设置为原数据;如果新索引跟原索引的值不同,则新索引对应的空缺位置会被填充为NaN或指定的其他值。

下面以DataFrame类的reindex()方法为例,介绍reindex()方法的语法格式。

reindex(labels=None, index=None, columns=None, axis=None, method=None, copy=True, level=None, fill_value=nan,limit=None, tolerance=None)

以下是 reindex() 方法各参数的介绍:

  1. index:可选参数,用于指定新的行索引 。可以是列表、数组等序列形式。若指定,DataFrame 的行索引会按其重新排列,新增索引对应位置会根据填充策略处理,没有对应数据时可能填充缺失值 。
  2. columns:可选参数,用于指定新的列索引 。形式要求和 index 类似。指定后,DataFrame 列索引会按其调整,新增列索引对应位置按填充策略处理 。
  3. method:可选参数,用于指定空缺位置的填充方式 。取值及含义如下:
    • None:默认值,不填充空缺位置,新索引对应无原始数据位置为缺失值 。
    • 'ffill''pad':前向填充,用前一个有效数据填充空缺 。
    • 'bfill''backfill':后向填充,用后一个有效数据填充空缺 。
    • 'nearest':根据最近的值填充空缺位置 。要求数据在对应轴上单调增减 。
  4. level:可选参数,当索引是多层索引(MultiIndex)时使用 。用于指定在多层索引的哪个层级上进行广播和匹配索引值 。比如对有两层行索引的 DataFrame,指定 level 可在特定层级调整索引 。
  5. fill_value:可选参数,默认值为 nan 。用于在计算前填充已存在的缺失值 。在新索引与原数据对齐时,若有缺失值(NaN),可用该参数指定的值替换 。
  6. limit:可选参数,用于限定前向或后向填充的最大连续元素数量 。比如 method='ffill' 时,设置 limit = 2,则连续空缺最多填充 2 个元素 。
  7. tolerance:可选参数,用于指定不精确匹配时,原始标签和新标签之间的最大距离 。在匹配位置,索引值需满足 abs(index(indexer) - target) <= tolerance 。适用于数值型索引的近似匹配场景 。
# 创建一个DataFrame
data = {'A': [1, 2, 3],'B': [4, 5, 6]
}
df = pd.DataFrame(data, index=['a', 'b', 'c'])
print(df)
# 使用reindex方法修改行索引
print("----------------------------")
new_index = ['a', 'b', 'c', 'd']
new_df = df.reindex(index=new_index, method='ffill')
print(new_df)
print("----------------------------")
# 使用reindex方法修改列索引
new_columns = ['A', 'B', 'C']
new_df_2 = df.reindex(columns=new_columns, fill_value=0)
print(new_df_2)

在这里插入图片描述

df_obj = pd.DataFrame({'no1': [1.0, 2.0, 3.0], 'no2': [4.0, 5.0, 6.0]},                           index=['a', 'b', 'c'])
new_df = df_obj.reindex(index=['a', 'c', 'e'], fill_value=9)
print(df_obj)
print(new_df)

在这里插入图片描述
新的索引中a、c是原来就有的,所有直接覆盖原来的,e索引又是没有的,所以通过fill_value 填充为9

通过索引和切片获取数据

pandas中通过索引或切片可以获取Series类和DataFrame类对象的数据,由于Series类和DataFrame类对象的结构有所不同,所以它们的索引和切片操作也会有所不同。

Series的索引和切片操作

Series类对象与NumPy一维数组的索引用法相似,不同的是,Series类对象的索引既可以是位置索引,也可以是标签索引。如果需要获取Series类对象的单个数据,则可以通过位置索引和标签索引进行获取

import pandas as pd
ser_obj = pd.Series([10, 20, 30, 40, 50], index=['one', 'two', 'three', 'four', 'five'])
# 通过位置索引获取
ser_obj[2]
# 通过参数索引获取
ser_obj['three']

如果想要获取多个数据,则可以传入一个数组。

ser_obj[[0, 2, 3]]
ser_obj[['one', 'three', 'four']]

布尔索引同样适用于pandas,具体用法与一维数组的布尔索引用法相同,即将Series类的对象中每个数据进行逻辑运算,只要运算结果为True,就返回Series类对象中位置为True对应的数据

ser_obj[ser_obj > 20]

通过切片也可以获取Series类的对象中的部分数据。如果切片使用的索引是位置索引,则切片结果包含起始位置但不包含结束位置对应的数据如果切片使用的索引是标签索引,则切片结果既包含起始位置又包含结束位置对应的数据

ser_obj[1:3]
ser_obj['two':'four']

DataFrame的索引和切片操作

DataFrame类对象与NumPy二维数组的索引用法相似,它里面每一列数据都是一个Series类的对象,可以通过列索引进行获取

arr = np.arange(12).reshape(3, 4)
df_obj = pd.DataFrame(arr, index=['row_1', 'row_2', 'row_3'], columns=['col_1', 'col_2', 'col_3', 'col_4'])
print(df_obj)
df_obj['col_2']

在这里插入图片描述

如果想要从DataFrame类对象中获取多列数据,那么可以将多个索引存放到列表中,再分别根据列表里面的每个索引进行获取,此过程相当于利用花式索引获取二维数组元素的操作。

df_obj[['col_1', 'col_3']]

在这里插入图片描述
如果想要获取多行数据,那么已通过切片完成

df_obj[1:3]

在这里插入图片描述
还可以通过切片获取部分行部分列

df_obj[1:3][['col_1','col_3']]

在这里插入图片描述

列好像不能这样切片

通过loc和iloc属性获取数据

前面介绍索引和切片的相关操作时,既可以单独使用位置索引或标签索引来获取数据,也可以混合使用位置索引、标签索引进行获取,这对刚接触pandas的开发人员来说是十分混乱的。为了从严格意义上区分位置索引和标签索引的相关操作,pandas中提供了两个非常重要的属性,分别是loc和iloc,其中loc是基于标签索引的索引器, iloc是基于位置索引的索引器

loc属性用于根据标签索引来获取数据。
语法

  • Series.loc[参数]
  • DataFrame.loc[参数1, 参数2]

可使用的标签索引形式

  • 单个标签索引,比如aNo1row_1col_1等。
  • 标签索引构成的列表或数组,比如['a', 'b', 'c']['col_1','col_3']等。
  • 基于标签索引的切片,比如'a':'c''two':'four'
  • 布尔类型的列表或数组,比如[True, False, True]

注意参数1参数2中涉及的索引分别是行索引和列索引,如果省略参数2,则此时获取的结果是DataFrame类的对象的一行或多行数据。

获取Series类对象的数据

import pandas as pd
ser_obj = pd.Series([10, 20, 30, 40, 50],index=['row1', 'row2', 'row3', 'row4', 'row5'])
  • 获取单个数据
ser_obj.loc['row2']
  • 获取多个数据
ser_obj.loc[['row2', 'row5']]
  • 获取多个连续数据
ser_obj.loc['row3':'row5']
  • 获取符合条件的数据
ser_bool = ser_obj < 30
ser_obj.loc[ser_bool]

获取DataFrame类对象的数据

import numpy as np
import pandas as pd
arr = np.arange(12).reshape(3, 4)
df_obj = pd.DataFrame(arr, index=['row_1', 'row_2', 'row_3'],columns=['col_1', 'col_2', 'col_3', 'col_4'])

行数据获取

  • 获取一行数据
df_obj.loc['row_1']
  • 获取多行数据
df_obj.loc[['row_1', 'row_3']]
  • 获取连续多行数据
df_obj.loc['row_1':'row_2']
  • 获取符合条件多行数据
df_obj.loc[[True, False, True]]

行列数据获取

  • 获取单个数据
df_obj.loc['row_3', 'col_3']

在这里插入图片描述

  • 获取多列数据
df_obj.loc['row_1':'row_3', ['col_1', 'col_3']]

在这里插入图片描述

通过iloc属性获取数据

iloc属性用于根据位置索引来获取数据。

语法

  • Series.iloc[参数]
  • DataFrame.iloc[参数1, 参数2]

可使用的位置索引形式

  • 单个位置索引,比如0123等。
  • 位置索引构成的列表或数组,比如[0, 2, 3]等。
  • 基于位置索引的切片,比如0:22:5
  • 布尔类型的列表或数组,比如[True, False, True]

示例
假设有df_obj

  • 获取一行数据
df_obj.iloc[0]
  • 获取多行数据
df_obj.iloc[[0, 2]]
  • 获取连续多行数据
df_obj.iloc[0:2]
  • 获取符合条件多行数据
df_obj.iloc[[True, False, True]]
  • 获取单个数据
df_obj.iloc[2, 2]
  • 获取多列数据
df_obj.iloc[0:3, [0, 2]]

总结

在机器学习领域蓬勃发展的当下,pandas库成为数据处理与分析的关键利器。本文聚焦pandas核心知识,涵盖SeriesDataFrame数据结构、索引与切片操作,助力读者快速上手,为机器学习实践筑牢根基。

  1. Series数据结构Series类似一维数组,由数据和索引构成,数据类型丰富多样。创建时,可传入列表、字典等,还能自定义索引。比如,pd.Series([1, 2, 3], index=['a', 'b', 'c'])。通过indexvalues属性,能便捷获取索引和数据,二者均支持迭代访问。
  2. DataFrame数据结构DataFrame类似二维数组或表格,兼具行索引与列索引,各列数据类型可不同,可视为多个Series的组合。创建方式多元,如传入字典时,键为列名,值列表为列数据;传入二维数组时,默认生成行列索引;还能自定义行列索引。获取列数据时,普通列名可用属性访问,特殊字符列名需用索引获取,info()方法则用于查看数据摘要。
  3. 索引对象详解:索引对象隶属Index类,其包含多种子类,如RangeIndex(默认位置索引)、Int64Index(整数索引)等,满足不同场景需求。索引对象具备不可变性,确保数据映射稳定;同时支持可重复性,is_unique方法可判断索引唯一性。reindex()方法用于重置索引,可灵活调整行列索引,依据填充策略处理新索引空缺值,method参数可选填充方式,fill_value指定填充值 。
  4. 索引和切片操作Series的索引和切片操作灵活,可依位置或标签索引获取单个、多个数据,布尔索引筛选数据,切片时位置索引和标签索引规则有别。DataFrame可通过列索引获取列数据,切片获取行数据,还能同时获取部分行列数据。lociloc属性则精准区分标签索引和位置索引操作,按相应索引规则获取数据,使数据获取更严谨、高效。

熟练掌握pandas这些关键内容,能大幅提升数据处理效率。无论是数据清洗、预处理,还是后续深度分析,都能游刃有余。希望读者持续探索,在机器学习与数据分析领域收获更多成果。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词