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

Python数据处理(一)- Pandas 安装与数据结构介绍

文章目录

  • 前言
  • 一、简介及安装
    • 1. 简介
    • 2. 安装 Pandas 库
      • 2.1 安装
      • 2.2 检查安装是否成功
  • 二、Pandas 数据结构
    • 1. Series
      • 1.1 创建 Series
        • 1.1.1 参数用法
        • 1.1.2 示例代码
      • 1.2 Series 方法
        • 1.2.1 常用的 Series 方法
        • 1.2.2 示例代码
      • 1.3 访问 Series
        • 1.3.1 访问 Series 中数据的方法
        • 1.3.2 示例代码
    • 2. DataFrame
      • 2.1 创建 DataFrame
        • 2.1.1 参数用法
        • 2.1.2 示例代码
      • 2.2 DataFrame 方法
        • 2.2.1 常用的 DataFrame 方法
        • 2.2.2 示例代码
      • 2.3 访问 DataFrame
        • 2.3.1 访问 DataFrame 中数据的方法
        • 2.3.2 示例代码


前言

在当今数据驱动的世界中,有效地处理和分析数据已成为众多领域不可或缺的一部分。从科学研究到商业决策,数据分析能力为理解复杂现象、发现模式以及做出明智选择提供了坚实的基础。随着大数据时代的到来,对高效且易于使用的数据处理工具的需求日益增长。

Pandas 应运而生,作为一个强大的开源数据处理与分析库,它专为 Python 编程语言设计,旨在简化结构化数据分析流程。Pandas 提供了两种主要的数据结构——Series 和 DataFrame,它们不仅能够存储多种类型的数据,还内置了大量的方法用于数据的操作和管理。无论是进行简单的数据清洗、复杂的统计建模还是直观的数据可视化,Pandas 都能提供简洁明了的接口,极大地提高了工作效率。

本教程将带领读者深入了解 Pandas 的核心功能,从基础安装配置开始,逐步介绍 Series 和 DataFrame 的创建、访问及操作技巧,并涵盖数据导入导出、缺失值处理、数据聚合等实用技能。通过一系列详尽的示例代码,我们将展示如何利用 Pandas 快速解析并操作数据集。


一、简介及安装

1. 简介

Pandas 是一个强大的开源数据处理和分析库,专门为Python编程语言设计。它提供了高性能、易用的数据结构和数据分析工具,特别适合处理表格型数据(如CSV或Excel文件中的数据)、时间序列数据以及其他形式的结构化数据集。

主要特点

  • DataFrame 和 Series 数据结构

    • DataFrame:类似于电子表格或SQL表的二维表格数据结构,具有行和列标签。每一列可以包含不同类型的数据(整数、字符串、浮点数等)。
    • Series:一维标记数组,能够存储任何类型的数据(整数、字符串、浮点数、Python对象等)。它是DataFrame的基本构建块。
  • 灵活的数据操作

    • 提供了多种方法用于索引、选择、过滤、聚合、分组、连接、合并、重塑、透视等操作。
    • 支持缺失数据的处理,例如填充空值、删除含有缺失值的行或列。
  • 高效的输入输出功能

    • 可以轻松地读取和写入各种格式的数据源,包括CSV、Excel、HDF5、SQL数据库、JSON等。
    • 对于大数据集,还支持增量式读取和写入。
  • 时间序列功能

    • 内置对日期时间的支持,方便进行时间序列数据的操作,如重采样、移动窗口统计、滚动计算等。
  • 可视化接口

    • 直接集成了matplotlib,使得绘制图表变得简单快捷;同时也兼容其他流行的绘图库如Seaborn、Plotly等。
  • 快速且易于使用

    • 基于NumPy构建,因此在性能上表现出色。
    • API设计直观,语法简洁明了,极大地提高了数据清洗和准备工作的效率。

2. 安装 Pandas 库

2.1 安装

执行如下命令安装 Pandas 库。

pip install pandas==2.0.3 -i https://mirrors.aliyun.com/pypi/simple/

2.2 检查安装是否成功

执行如下命令查看 Pandas 相关库是否安装成功。

pip show pandas

安装成功如下图所示。

在这里插入图片描述


二、Pandas 数据结构

1. Series

Series 是 Pandas 中的基本数据结构之一,可以将 Series 看作是一个一维的数组,它可以保存任何类型的数据(整数、浮点数、字符串、Python 对象等)。每个 Series 都有一个与之关联的索引(即标签),用于标记位置,这使得 Series 不仅是一组数据值,还包含了元数据信息。

1.1 创建 Series

1.1.1 参数用法

创建一个 Pandas 的 Series 对象,可以调用 pd.Series() 构造函数,该函数的参数如下表。

参数名类型必需/可选描述
dataarray-like可选Series 的数据部分。可以是列表、NumPy 数组、字典、标量值等。如果不提供此参数,则创建一个空的 Series。
indexarray-like可选Series 的索引标签。用于对数据进行标记。如果不提供此参数,则创建默认的整数索引。
dtypedtype可选指定 Series 中的数据类型。例如 NumPy 的 np.int64np.float64。如果未提供,则自动推断数据类型。
namestring可选Series 的名称,用于标识 Series 对象。如果提供了此参数,则创建的 Series 对象将具有指定的名称。
copybool可选是否复制数据,默认为 False 表示不复制数据。如果设置为 True,则复制输入的数据。
1.1.2 示例代码
import pandas as pd  # 导入pandas库,并简写为pd,方便后续调用

# 创建一个简单的 Series 对象,仅提供数据部分,默认索引为 [0, 1, 2]
ages = pd.Series(data=[29, 45, 33])
print(ages)  # 输出这个 Series,将看到默认整数索引和对应的年龄值
print('==================================')

# 创建一个新的 Series 对象,并为其指定名称 'age'
ages = pd.Series(data=[29, 45, 33], name='age')
print(ages)  # 输出带名称的 Series,现在 Series 的名称是 'age'
print('==================================')

# 创建一个 Series 对象,同时自定义索引和名称
ages = pd.Series(data=[29, 45, 33], index=[1, 2, 3], name='age')
print(ages)  # 输出时可以看到自定义的索引 [1, 2, 3] 和名称 'age'
print('==================================')

# 创建一个 Series 对象,使用 copy 参数确保输入的数据被复制了一份
# 这意味着对原始数据的任何更改都不会影响到这个 Series 中的数据
ages = pd.Series(data=[29, 45, 33], copy=True, index=[1, 2, 3], name='age')
print(ages)  # 输出与前一个示例相同,但是内部数据是独立副本

打印结果如下:

在这里插入图片描述

1.2 Series 方法

1.2.1 常用的 Series 方法
方法名描述示例
head(n)返回 Series 的前 n 行,默认为 5 行。s.head(3)
tail(n)返回 Series 的最后 n 行,默认为 5 行。s.tail(3)
sample(n)随机返回 n 行数据。s.sample(2)
describe()生成描述性统计信息,如计数、平均值、标准差等。s.describe()
info()提供 Series 的简要信息,包括非空值的数量和内存使用情况。s.info()
value_counts()返回 Series 中唯一值的频率分布。s.value_counts()
unique()返回 Series 中所有不同的值。s.unique()
nunique()返回 Series 中不同元素的数量。s.nunique()
sort_values()按值对 Series 进行排序,可以指定升序或降序。s.sort_values(ascending=False)
sort_index()按索引对 Series 进行排序。s.sort_index()
dropna()删除 Series 中的所有缺失值。s.dropna()
fillna(value)用指定的值填充 Series 中的所有缺失值。s.fillna(0)
isnull()isna()检查 Series 中是否有缺失值,返回布尔值 Series。s.isnull()
notnull()notna()检查 Series 中哪些值不是缺失值,返回布尔值 Series。s.notnull()
astype(dtype)将 Series 中的数据转换为指定的数据类型。s.astype('float64')
copy()创建 Series 的一个副本。s.copy()
rename(index_mapper)更改 Series 的名称或索引标签。s.rename(index_mapper)
apply(func)对 Series 中的每个元素应用一个函数。s.apply(lambda x: x * 2)
map(arg)使用给定的映射关系替换 Series 中的值。s.map({'old_value': 'new_value'})
groupby(by)根据指定的键对 Series 进行分组。s.groupby(s > 10).mean()
agg(func)对 Series 应用一个或多个聚合函数。s.agg(['mean', 'sum'])
1.2.2 示例代码
import pandas as pd

# 创建一个空的 Series
s = pd.Series()

# 用自定义的数据填充 Series
data = [10, 20, 30, 40, 50]
index = ['a', 'b', 'c', 'd', 'e']
s = pd.Series(data=data, index=index, name='example_series')

print("原始 Series:")
print(s)
print('==================================')

# head(n): 返回前 n 行
print("head(3):")
print(s.head(3))
print('==================================')

# tail(n): 返回最后 n 行
print("tail(2):")
print(s.tail(2))
print('==================================')

# sample(n): 随机返回 n 行
print("sample(2):")
print(s.sample(2))  # 注意:每次运行时输出可能不同,因为是随机选择
print('==================================')

# describe(): 生成描述性统计信息
print("describe():")
print(s.describe())
print('==================================')

# value_counts(): 返回频率分布
print("value_counts():")
print(s.value_counts())
print('==================================')

# unique(): 返回所有不同的值
print("unique():")
print(s.unique())
print('==================================')

# nunique(): 返回不同元素的数量
print("nunique():")
print(s.nunique())
print('==================================')

# sort_values(): 按值排序
print("sort_values():")
print(s.sort_values())
print('==================================')

# sort_index(): 按索引排序
print("sort_index():")
print(s.sort_index())
print('==================================')

# dropna(): 删除缺失值
# 先插入一些 NaN 值用于演示
s_with_nan = s.copy()
s_with_nan['f'] = pd.NA
print("dropna():")
print(s_with_nan.dropna())
print('==================================')

# fillna(value): 用指定值填充缺失值
print("fillna(99):")
print(s_with_nan.fillna(99))
print('==================================')

# isnull() 或 isna(): 检查是否有缺失值
print("isnull():")
print(s_with_nan.isnull())
print('==================================')

# notnull() 或 notna(): 检查哪些值不是缺失值
print("notnull():")
print(s_with_nan.notnull())
print('==================================')

# astype(dtype): 转换数据类型
print("astype('float64'):")
print(s.astype('float64'))
print('==================================')

# copy(): 创建副本
s_copy = s.copy()
print("copy():")
print(s_copy)
print('==================================')

# rename(index_mapper): 更改名称或索引标签
print("rename({'a': 'alpha'}):")
print(s.rename(index={'a': 'alpha'}, inplace=False))
print('==================================')

# apply(func): 对每个元素应用函数
print("apply(lambda x: x * 2):")
print(s.apply(lambda x: x * 2))
print('==================================')

# map(arg): 使用映射关系替换值
print("map({10: 'ten', 20: 'twenty'}):")
print(s.map({10: 'ten', 20: 'twenty'}))
print('==================================')

# groupby(by).agg(func): 分组并聚合
# 这里我们创建一个新的 Series 来演示分组
grouped_s = pd.Series([1, 1, 2, 2, 3], index=['a', 'b', 'c', 'd', 'e'], name='groups')
print("groupby().mean():")
print(s.groupby(grouped_s).mean())
print('==================================')

# agg(func): 应用多个聚合函数
print("agg(['mean', 'sum']):")
print(s.agg(['mean', 'sum']))

打印结果如下:

在这里插入图片描述
在这里插入图片描述

1.3 访问 Series

1.3.1 访问 Series 中数据的方法
方法/属性描述示例
s[index]使用索引标签访问单个元素。s['a']
s.iloc[pos]使用整数位置(基于0)访问单个元素。s.iloc[0]
s.loc[label]使用索引标签访问单个元素或一组元素。s.loc['a']
s[start:end]切片操作,获取从 start 索引到 end 索引之间的所有元素(不包括 end)。s['b':'d']
s[[label1, label2]]使用标签列表选择多个元素。s[['a', 'c']]
s.iloc[start:end:step]使用整数位置进行切片,可以指定步长。s.iloc[1:4:2]
s[s > value]布尔索引,返回满足条件的所有元素。s[s > 30]
s.isin(values)返回一个布尔 Series,表示哪些元素在给定的值列表中。s.isin([10, 30])
s.get(label, default=None)安全地访问元素,如果标签不存在则返回默认值。s.get('f', default='Not Found')
s.values获取底层的 NumPy 数组。s.values
s.index获取 Series 的索引对象。s.index
s.name获取或设置 Series 的名称。s.name
s.head(n)获取 Series 的前 n 个元素,默认为5个。s.head(3)
s.tail(n)获取 Series 的最后 n 个元素,默认为5个。s.tail(3)
1.3.2 示例代码
import pandas as pd

# 创建一个示例 Series
data = [10, 20, 30, 40, 50]
index = ['a', 'b', 'c', 'd', 'e']
s = pd.Series(data=data, index=index, name='example_series')

# 访问 Series 的不同方式
print("通过索引标签访问单个元素:")
print(s['a'])
print('==================================')

print("使用 iloc 通过整数位置访问单个元素:")
print(s.iloc[0])
print('==================================')

print("使用 loc 通过索引标签访问多个元素:")
print(s.loc[['a', 'c']])
print('==================================')

print("切片操作获取部分数据:")
print(s['b':'d'])  # 注意:包含起始索引,不包含结束索引
print('==================================')

print("使用布尔索引获取满足条件的数据:")
print(s[s > 30])
print('==================================')

print("安全地访问可能不存在的元素:")
print(s.get('f', default='Not Found'))
print('==================================')

print("获取底层的 NumPy 数组:")
print(s.values)
print('==================================')

print("获取 Series 的索引对象:")
print(s.index)
print('==================================')

print("获取 Series 的名称:")
print(s.name)

打印结果如下:

在这里插入图片描述

2. DataFrame

DataFrame 简介

描述细节
定义Pandas 中的核心数据结构之一,类似于一个二维的表格或数据库中的数据表。
组成包含一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型等)。
索引拥有行索引和列索引,可视为由 Series 组成的字典(共享相同索引)。
功能提供各种操作进行数据访问、筛选、分割、合并、重塑、聚合及转换。

DataFrame 特点

特性描述
二维结构类似于 Excel 表格或 SQL 表,具有行和列;由多个 Series 对象组成的字典。
列的数据类型支持不同列包含不同类型的数据,如整数、浮点数、字符串或 Python 对象。
索引具备行索引和列索引,方便定位和选择数据。
大小可变支持添加和删除列,如同 Python 字典一样灵活。
自动对齐在算术运算或数据对齐时,自动根据索引对齐数据。
处理缺失数据可以表示缺失数据,并提供多种方法处理这些缺失值。
数据操作支持切片、索引、子集分割等数据操作。
时间序列支持提供了针对时间序列数据的特殊支持。
数据访问使用 .loc, .iloc.query() 方法实现灵活的数据访问。
数据处理数据合并、重塑、透视、分组和聚合等功能强大。
数据可视化虽然本身不是可视化工具,但与 Matplotlib 或 Seaborn 结合良好。
高效 I/O方便读取和写入多种格式的数据,如 CSV、Excel、SQL 数据库和 HDF5。
描述性统计提供计算描述性统计数据的方法,例如 .describe(), .mean(), .sum() 等。
数据集成容易与其他 DataFrame 或 Series 对象进行合并、连接或更新。
转换功能支持对数据集中的值进行转换,例如通过 .apply() 方法应用函数。
滚动窗口和时间序列分析支持滚动窗口统计和时间序列分析。

2.1 创建 DataFrame

2.1.1 参数用法

创建一个 Pandas 的 DataFrame 对象,你可以调用 pd.DataFrame() 构造函数,该函数的参数如下表所示:

参数名类型必需/可选描述
dataarray-like, dict, DataFrame可选DataFrame 的数据部分。可以是列表、NumPy 数组、字典、另一个DataFrame等。如果不提供此参数,则创建一个空的 DataFrame。
indexarray-like可选DataFrame 的行索引标签。用于对行数据进行标记。如果不提供此参数,则创建默认的整数索引。
columnsarray-like可选DataFrame 的列名。用于对列数据进行标记。如果不提供此参数,并且data为字典或有列信息的数据结构,则使用其键作为列名;否则,默认为整数。
dtypedtype or dict可选指定 DataFrame 中的数据类型。可以为单个dtype(应用于所有列)或dict(为各列指定不同dtype)。如果未提供,则自动推断数据类型。
copybool可选是否复制数据,默认为 False 表示不复制数据。如果设置为 True,则复制输入的数据。
2.1.2 示例代码
import pandas as pd  # 导入pandas库,并简写为pd,方便后续调用

# 创建一个简单的 DataFrame 对象,仅提供数据部分,默认索引和列名
data = [[29, 'Alice'], [45, 'Bob'], [33, 'Charlie']]
df = pd.DataFrame(data=data)
print(df)  # 输出这个 DataFrame,将看到默认整数索引和列名 0, 1
print('==================================')

# 创建一个新的 DataFrame 对象,并为其指定列名
df_with_columns = pd.DataFrame(data=data, columns=['Age', 'Name'])
print(df_with_columns)  # 输出带列名的 DataFrame
print('==================================')

# 创建一个 DataFrame 对象,同时自定义行索引和列名
df_custom_index = pd.DataFrame(data=data, index=['row1', 'row2', 'row3'], columns=['Age', 'Name'])
print(df_custom_index)  # 输出时可以看到自定义的行索引 ['row1', 'row2', 'row3'] 和列名 ['Age', 'Name']
print('==================================')

# 创建一个 DataFrame 对象,使用 copy 参数确保输入的数据被复制了一份
# 这意味着对原始数据的任何更改都不会影响到这个 DataFrame 中的数据
df_copy = pd.DataFrame(data=data, copy=True, index=['row1', 'row2', 'row3'], columns=['Age', 'Name'])
print(df_copy)  # 输出与前一个示例相同,但是内部数据是独立副本

打印结果如下:

在这里插入图片描述

2.2 DataFrame 方法

2.2.1 常用的 DataFrame 方法
方法名描述示例
head(n)返回 DataFrame 的前 n 行,默认为 5 行。df.head(3)
tail(n)返回 DataFrame 的最后 n 行,默认为 5 行。df.tail(3)
sample(n)随机返回 n 行数据。df.sample(2)
describe()生成描述性统计信息,如计数、平均值、标准差等。df.describe()
info()提供 DataFrame 的简要信息,包括非空值的数量和内存使用情况。df.info()
value_counts()对 Series 或 DataFrame 的列返回唯一值的频率分布。df['column_name'].value_counts()
unique()返回 DataFrame 列中所有不同的值。df['column_name'].unique()
nunique()返回 DataFrame 列中不同元素的数量。df['column_name'].nunique()
sort_values(by, ascending)按指定列的值对 DataFrame 进行排序,可以指定升序或降序。df.sort_values(by='column_name', ascending=False)
sort_index(axis, ascending)按索引对 DataFrame 进行排序。df.sort_index(axis=0, ascending=True)
dropna(how, subset)删除 DataFrame 中的所有缺失值行或列。df.dropna()
fillna(value)用指定的值填充 DataFrame 中的所有缺失值。df.fillna(0)
isnull()isna()检查 DataFrame 中是否有缺失值,返回布尔值 DataFrame。df.isnull()
notnull()notna()检查 DataFrame 中哪些值不是缺失值,返回布尔值 DataFrame。df.notnull()
astype(dtype)将 DataFrame 中的数据转换为指定的数据类型。df.astype({'column_name': 'float64'})
copy(deep)创建 DataFrame 的一个副本。df.copy()
rename(mapper, axis)更改 DataFrame 的列名或索引标签。df.rename(columns={'old_name': 'new_name'}, inplace=False)
apply(func, axis)对 DataFrame 的每一行或每一列应用一个函数。df.apply(lambda x: x * 2, axis=0)
applymap(func)对 DataFrame 中的每个元素应用一个函数。df.applymap(lambda x: x * 2)
groupby(by)根据指定的键对 DataFrame 进行分组。df.groupby('column_name').mean()
agg(func)对 DataFrame 应用一个或多个聚合函数。df.agg({'column_name': ['mean', 'sum']})
merge(right, on)合并两个 DataFrame,类似于 SQL JOIN。df.merge(other_df, on='key')
pivot_table(values, index, columns)创建透视表。df.pivot_table(values='D', index=['A', 'B'], columns=['C'])
2.2.2 示例代码
import pandas as pd

# 创建一个示例 DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    'Age': [29, 45, 33, 42],
    'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']
}
df = pd.DataFrame(data)

print("原始 DataFrame:")
print(df)
print('==================================')

# head(n): 返回前 n 行
print("head(2):")
print(df.head(2))
print('==================================')

# tail(n): 返回最后 n 行
print("tail(1):")
print(df.tail(1))
print('==================================')

# sample(n): 随机返回 n 行
print("sample(2):")
print(df.sample(2))  # 注意:每次运行时输出可能不同,因为是随机选择
print('==================================')

# describe(): 生成描述性统计信息
print("describe():")
print(df.describe())
print('==================================')

# value_counts(): 返回频率分布(应用于某一列)
print("value_counts() for City:")
print(df['City'].value_counts())
print('==================================')

# unique(): 返回所有不同的值(应用于某一列)
print("unique() for Name:")
print(df['Name'].unique())
print('==================================')

# nunique(): 返回不同元素的数量(应用于某一列)
print("nunique() for Age:")
print(df['Age'].nunique())
print('==================================')

# sort_values(): 按指定列的值排序
print("sort_values() by Age:")
print(df.sort_values(by='Age', ascending=False))
print('==================================')

# sort_index(): 按索引排序
print("sort_index():")
print(df.sort_index())
print('==================================')

# dropna(): 删除包含缺失值的行(先插入一些 NaN 值用于演示)
df_with_nan = df.copy()
df_with_nan.loc[4] = [pd.NA, 30, 'Boston']
print("dropna():")
print(df_with_nan.dropna())
print('==================================')

# fillna(value): 用指定值填充缺失值
print("fillna('Unknown'):")
print(df_with_nan.fillna('Unknown'))
print('==================================')

# isnull() 或 isna(): 检查是否有缺失值
print("isnull():")
print(df_with_nan.isnull())
print('==================================')

# notnull() 或 notna(): 检查哪些值不是缺失值
print("notnull():")
print(df_with_nan.notnull())
print('==================================')

# astype(dtype): 转换数据类型
print("astype({'Age': 'str'}):")
print(df.astype({'Age': 'str'}))
print('==================================')

# copy(): 创建副本
df_copy = df.copy()
print("copy():")
print(df_copy)
print('==================================')

# rename(mapper, axis): 更改名称或索引标签
print("rename({'Name': 'Full Name'}, axis=1):")
print(df.rename(columns={'Name': 'Full Name'}, inplace=False))
print('==================================')

# apply(func, axis): 对每一行或每一列应用函数
print("apply(lambda x: x.max(), axis=0):")
print(df.apply(lambda x: x.max(), axis=0))
print('==================================')

# applymap(func): 对每个元素应用函数
# 正确地将所有字符串转换为大写
# 方法1: 使用 apply() 和 str accessor 对特定的字符串列操作
print("apply(lambda x: x.str.upper()):")
print(df.apply(lambda x: x.str.upper() if x.dtype == "object" else x))
print('==================================')

# 方法2: 使用 applymap() 对 DataFrame 中的所有元素操作
print("applymap(str.upper):")
print(df.applymap(lambda x: x.upper() if isinstance(x, str) else x))

# groupby(by).agg(func): 分组并聚合
print("groupby('City').agg({'Age': 'mean'}):")
print(df.groupby('City').agg({'Age': 'mean'}))
print('==================================')

# agg(func): 应用多个聚合函数
print("agg({'Age': ['mean', 'sum']}):")
print(df.agg({'Age': ['mean', 'sum']}))
print('==================================')

# merge(right, on): 合并两个 DataFrame
other_df = pd.DataFrame({
    'City': ['New York', 'Los Angeles', 'Chicago'],
    'Population': [8419000, 3976000, 2716000]
})
print("merge() with other_df on 'City':")
print(df.merge(other_df, on='City'))
print('==================================')

# pivot_table(values, index, columns): 创建透视表
print("pivot_table() for Population based on Name and City:")
print(df.merge(other_df, on='City').pivot_table(values='Population', index='Name', columns='City'))

打印结果如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3 访问 DataFrame

2.3.1 访问 DataFrame 中数据的方法
方法/属性描述示例
df[column]使用列名访问单个列,返回 Series。df['Name']
df[[col1, col2]]使用列名列表选择多个列,返回新的 DataFrame。df[['Name', 'Age']]
df.iloc[row, col]使用整数位置(基于0)访问单个元素或切片。df.iloc[0, 1]df.iloc[0:2, 1:3]
df.loc[label, column]使用索引标签和列名访问单个元素或一组元素。df.loc['row1', 'Name']df.loc[['row1', 'row2'], ['Name', 'Age']]
df.loc[start:end, columns]切片操作,获取从 start 索引到 end 索引之间的所有行及指定的列。df.loc['b':'d', ['Name', 'Age']]
df[df['column'] > value]布尔索引,返回满足条件的所有行。df[df['Age'] > 30]
df.isin(values)返回一个布尔 DataFrame,表示哪些元素在给定的值列表中。df.isin({'Name': ['Alice', 'Bob']})
df.get(column, default=None)安全地访问列,如果列不存在则返回默认值。df.get('NonExistentColumn', default=pd.Series())
df.values获取底层的 NumPy 数组。df.values
df.index获取 DataFrame 的行索引对象。df.index
df.columns获取 DataFrame 的列名对象。df.columns
df.head(n)获取 DataFrame 的前 n 行,默认为5行。df.head(3)
df.tail(n)获取 DataFrame 的最后 n 行,默认为5行。df.tail(3)
df.at[row_label, col_label]快速访问单个标量值,使用行和列标签。df.at['row1', 'Name']
df.iat[row_pos, col_pos]快速访问单个标量值,使用整数位置。df.iat[0, 1]
2.3.2 示例代码
import pandas as pd

# 创建一个示例 DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    'Age': [29, 45, 33, 42],
    'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']
}
df = pd.DataFrame(data, index=['row1', 'row2', 'row3', 'row4'])

print("原始 DataFrame:")
print(df)
print('==================================')

# 使用列名访问单个列,返回 Series
print("通过列名访问单个列:")
print(df['Name'])
print('==================================')

# 使用列名列表选择多个列,返回新的 DataFrame
print("通过列名列表选择多个列:")
print(df[['Name', 'Age']])
print('==================================')

# 使用 iloc 通过整数位置访问单个元素或切片
print("使用 iloc 通过整数位置访问单个元素:")
print(df.iloc[0, 1])  # 第一行,第二列
print("使用 iloc 进行切片:")
print(df.iloc[0:2, 1:3])  # 前两行,第二到第三列
print('==================================')

# 使用 loc 通过索引标签和列名访问单个元素或一组元素
print("使用 loc 通过索引标签和列名访问单个元素:")
print(df.loc['row1', 'Name'])
print("使用 loc 访问多行多列:")
print(df.loc[['row1', 'row2'], ['Name', 'Age']])
print('==================================')

# 切片操作获取部分数据
print("切片操作获取部分数据:")
print(df.loc['row2':'row4', ['Name', 'Age']])  # 注意:包含起始索引,不包含结束索引
print('==================================')

# 使用布尔索引获取满足条件的数据
print("使用布尔索引获取满足条件的数据:")
print(df[df['Age'] > 30])
print('==================================')

# 安全地访问可能不存在的列
print("安全地访问可能不存在的列:")
print(df.get('NonExistentColumn', default=pd.Series()))
print('==================================')

# 获取底层的 NumPy 数组
print("获取底层的 NumPy 数组:")
print(df.values)
print('==================================')

# 获取 DataFrame 的行索引对象
print("获取 DataFrame 的行索引对象:")
print(df.index)
print('==================================')

# 获取 DataFrame 的列名对象
print("获取 DataFrame 的列名对象:")
print(df.columns)
print('==================================')

# 使用 at 访问单个标量值,使用行和列标签
print("使用 at 访问单个标量值:")
print(df.at['row1', 'Name'])
print('==================================')

# 使用 iat 访问单个标量值,使用整数位置
print("使用 iat 访问单个标量值:")
print(df.iat[0, 1])

打印结果如下:

在这里插入图片描述
在这里插入图片描述


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

相关文章:

  • 【NLP】语言模型的发展历程 (1)
  • 数据结构--二叉树
  • React第二十二章(useDebugValue)
  • 代码随想录算法训练营第十二天|第18题. 四数之和
  • 《AI创造力的边界与机器人技术的现实困境:一个双重视角的探讨》
  • JavaScript系列(28)--模块化开发详解
  • 【时时三省】(C语言基础)经典笔试题3
  • 1Spark 基础
  • 信息系统安全设计方案,软件系统安全设计总体解决方案(Word原件)
  • docker-compose和docker-harbor
  • 大模型训练_硬件微调知识增强
  • GLM: General Language Model Pretraining with Autoregressive Blank Infilling论文解读
  • 网络技术发展的演变与未来展望
  • Java List排序:Comparable与Comparator接口及Stream API应用
  • Eclipse 视图(View)
  • (蓝桥杯)使用前缀和与二分查找解决子数组和问题——不太甜的糖果
  • 【深度学习实战】kaggle 自动驾驶的假场景分类
  • Unity3D实现加载.abc动画模型
  • Postman接口自动化测试:批量参数化(参数文件)
  • 高通骁龙8 Elite 2性能综合测评
  • 【0391】Postgres内核 checkpointer process ① 启动初始化
  • 晨辉面试抽签和评分管理系统之八:随机编排考生的面试批次(以教师资格考试面试为例)
  • 人狗大战 Java新实现,更有趣,Java _Springboot_Spring AI
  • 深度解析 React 中 setState 的原理:同步与异步的交织
  • 前端实现doc文件预览的三种方式
  • TouchGFX学习笔记(一)