高中信息技术: Pandas 数据处理与分析

date
Apr 17, 2024
slug
pandas-dataframe
tags
学习
status
Published
summary
高中信息技术(浙江) Pandas 数据分析笔记
type
Post

DataFrame 的创建

函数信息

pd.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
  • data: 数据。可以是字典、数组、或者其他DataFrame等。
  • index: 索引。用于标记数据的行标签。如果未提供,则默认为整数索引。
  • columns: 列标签。用于标记数据的列标签。如果未提供,则默认为整数索引或由数据结构推断得出。
  • dtype: 数据类型。指定整个DataFrame的数据类型,或为各列分别指定数据类型。
  • copy: 是否复制数据,默认为False。

代码示例

使用字典创建DataFrame

输出:

指定列的顺序

输出:

注意事项

  • 在使用字典创建DataFrame时,字典的键(key)将成为DataFrame的列名,字典的值(value)将成为数据。
  • 如果指定了columns参数,但某些指定的列名在数据中不存在,则这些列在结果DataFrame中将显示为全NaN。
  • 如果数据的每一列都有一个明确的数据类型,Pandas将自动推断数据类型;否则,它可能会将数据类型推断为更通用的类型,如object

DataFrame 不同类型数据创建

DataFrame的灵活性在于它可以接受多种类型的输入数据,如列表、NumPy数组、Series等。以下是使用这些不同类型的数据创建DataFrame的示例:

使用列表创建DataFrame的字典示例

输出:
这个例子通过字典创建了一个DataFrame,其中字典的键是列名,值是列表,列表中的元素对应每列的值。

使用NumPy数组创建DataFrame的字典示例

输出示例(由于使用了随机数,每次输出可能不同):
这个例子展示了如何使用NumPy数组作为列数据创建DataFrame。这种方式特别适用于需要处理大量数值数据的科学计算。

使用Series创建DataFrame的字典示例

输出:
这个例子通过字典创建了一个DataFrame,其中字典的值是Series对象。每个Series成为DataFrame的一列,Series的name属性成为列名。

注意事项

  • 当使用列表或NumPy数组作为数据源时,所有列表或数组的长度必须相同。
  • 使用Series作为数据源时,DataFrame的索引将自动对齐Series的索引。
  • 如果DataFrame的列是不同的数据类型,Pandas将保留每列的数据类型。这使得DataFrame非常适合存储异构数据类型的数据集。

DataFrame 的属性详解

DataFrame 是 pandas 中的一个非常重要的数据结构,用于处理表格型数据。了解 DataFrame 的关键属性是有效使用 pandas 的基础。下面详细介绍了几个常用的 DataFrame 属性,包括它们的使用方法、输出结果和注意事项。

获取行索引:df.index

  • 使用方法
  • 输出结果
  • 注意事项:行索引默认是从0开始的整数序列,表示为 RangeIndex 对象。如果 DataFrame 被重新索引,index 可能会变成非整数序列或包含实际数据的序列。

获取值的二维数据:df.values

  • 使用方法
  • 输出结果
  • 注意事项values 返回一个二维的 NumPy 数组,其中包含 DataFrame 的数据。因为 DataFrame 可以包含不同类型的数据列,所以这个数组的数据类型可能是泛化的 object,以便容纳不同类型的数据。

获取列标题:df.columns

  • 使用方法
  • 输出结果
  • 注意事项:列标题(或列名)是一个 Index 对象,其中包含了所有列的名称。这些名称用于访问或操作 DataFrame 的列。列名的数据类型通常为 object,即字符串。

DataFrame 转置:df.T

  • 使用方法
  • 输出结果
  • 注意事项:转置操作(.T)返回一个新的 DataFrame,其中原始 DataFrame 的行和列互换了位置。这在某些数据分析场景中非常有用,尤其是当你需要将列名作为一个维度进行分析时。
通过这些属性,可以更加灵活地处理和分析 DataFrame 中的数据。

DataFrame 的访问

DataFrame 是 pandas 中用于存储和操作表格数据的核心数据结构。了解如何访问和修改 DataFrame 中的数据是进行数据分析和数据处理的基础。下面介绍了几种常见的访问和修改 DataFrame 数据的方法。

属性访问

  • 用法
  • 输出结果
  • 注意点:属性访问是通过.操作符来访问DataFrame中的列。这种方法简洁直观,但是仅当列名是有效的Python变量名且不与DataFrame的方法和属性冲突时可用。如果列名包含空格或特殊字符,或者是Python的保留关键字,则无法使用属性访问。

类似字典的方式访问

  • 用法
  • 输出结果
  • 注意点:字典方式访问是通过[]操作符来访问DataFrame中的列,这种方式更加灵活,可以处理任何类型的列名。无论列名是否包含空格、特殊字符,或者是Python的保留关键字,都可以使用这种方式访问。
访问 DataFrame 中的单个值,你可以使用 .at[].iat[] 方法。这两种方法都能高效地访问或修改 DataFrame 中的单个值,但它们在使用方式上有所不同。

使用 .at[] 方法

.at[] 方法允许你通过行标签和列标签访问 DataFrame 中的值。这是一种基于标签的查找方法。
用法
输出结果

使用 .iat[] 方法

.iat[] 方法允许你通过行索引和列索引访问 DataFrame 中的值。这是一种基于整数位置的查找方法。
用法
输出结果
注意:尽管 .loc[].iloc[] 也可以访问单个值,但如果你确实只需要访问一个单独的元素,.at[].iat[] 会更快。

访问多个列

如果你想要访问 DataFrame 中的多个列,你可以通过传递一个列名列表到 DataFrame 来实现。用法:
这将输出:
这里,我们创建了一个包含 "姓名" 和 "借阅次数" 的列表,并将其传递给 DataFrame df,从而选择了这两列。

Pandas ❤ Excel

函数信息

pd.read_excel(io, sheet_name=0)
  • io: 文件路径或文件对象。指向要读取的Excel文件。
  • sheet_name: 指定要读取的工作表(sheet)名称或索引,默认值为0,表示第一个工作表。

代码示例

注意点和函数用法

  • 文件路径:确保提供的文件路径是正确的,包括文件名及其后缀。路径可以是相对路径或绝对路径。
  • 文件格式pd.read_excel() 函数默认尝试读取Excel文件的第一个工作表。如果需要读取其他工作表,可以通过 sheet_name 参数进行指定,既可以使用工作表的名称,也可以使用工作表的索引(从0开始)。
  • 返回值:该函数返回一个DataFrame对象,其中包含了Excel文件指定工作表的数据。可以使用这个DataFrame对象进行后续的数据分析和处理操作。

示例输出

假设 "aaa.xlsx" 文件中的内容如下:
运行以上代码后,输出结果将是:
这是DataFrame对象df2的内容,它包含了从Excel文件中读取的数据。

DataFrame 的条件筛选

使用布尔索引筛选DataFrame中的数据是Pandas中非常强大的功能之一。下面是一些基于上述假设的DataFrame进行条件筛选的示例:
假设源DataFrame为:

代码示例

  1. 筛选“借阅次数”小于40的数据行:
输出结果:
  1. 筛选性别为男性且借阅次数大于30的数据行:
输出结果:
  1. 筛选姓名为小红或小李的数据行:
输出结果:
  1. 检索“借阅次数”大于30的数据行:
输出结果:
  1. 检索性别不是男性的数据行:
输出结果:
  1. 检索姓名是“小明”的数据行:
输出结果:
通过上述示例,我们可以看到,使用布尔索引进行条件筛选是非常直观和强大的。它允许我们基于一个或多个条件来筛选出DataFrame中的特定数据行。

DataFrame 中追加数据行

DataFrame.append(other, ignore_index=False, verify_integrity=False, sort=None)
  • other: 是要添加的数据,append很不挑食,这个other可以是DataFramedictSerieslist等等。
  • ignore_index: 参数为True时将在数据合并后,按照0,1,2,3....的顺序重新设置索引,忽略了旧索引。
  • verify_integrity: 如果设置为True,将会检查新旧DataFrame合并后的索引是否有重复,如果有重复则会抛出异常。
  • sort: 在列合并时,是否对列进行排序,默认为None。如果设置为True,则按字典顺序对结果中出现的列进行排序。

代码示例

假设有如下的DataFrame df1
原始DataFrame df1:
现在,我们想要将一个新的数据行追加到df1中:
  1. 使用字典追加单行数据:
输出结果:
  1. 使用另一个DataFrame追加多行数据:
输出结果:
通过这些示例,我们可以看到DataFrame.append()方法是处理数据合并的一个非常灵活的工具,能够轻松地将新的数据行添加到现有的DataFrame中。
在之前的示例中,我们看到了如何使用DataFrame.append()方法来向DataFrame中追加数据。现在,让我们通过一个具体的例子来展示如何使用自定义索引创建DataFrame,并在此基础上进行数据追加。

自定义索引的DataFrame创建

首先,我们创建一个包含自定义索引的DataFrame:
这将输出:
在这个例子中,我们通过指定index参数为["t-1", "t-2", "t-3"],给df1的每行数据设置了一个自定义的索引。

追加数据行到具有自定义索引的DataFrame

现在,如果我们想要追加一行数据到这个DataFrame中,我们可以这样做:
  1. 使用字典追加单行数据并忽略旧索引:
这将输出:
请注意,由于我们使用了ignore_index=True,新的DataFrame df1的索引被重新设置为默认的整数索引。
如果你想保留自定义索引并向DataFrame追加新行,你需要创建一个新的DataFrame或Series并指定索引,然后使用append方法。但是,这种情况下通常推荐使用pd.concat()方法,因为它提供了更多关于索引处理的选项。

DataFrame 删除

DataFrame中删除行/列数据

DataFrame.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')
  • labels: 单个标签或标签列表,指定要删除的行或列。
  • axis: 通过设置axis=0删除行,axis=1删除列。默认值为0
  • index: 用于删除行,labels的别名,当axis=0时使用。
  • columns: 用于删除列,当axis=1时使用。
  • level: 如果DataFrame是MultiIndex(多层索引),则可以指定级别。
  • inplace: 如果设置为True,则会直接在原始DataFrame上进行修改,否则返回一个新的DataFrame。默认为False
  • errors: 如果设置为'raise'(默认),则当尝试删除不存在的标签时会抛出错误;如果设置为'ignore',则即使标签不存在也不会抛出错误。
假设有如下的DataFrame df
原始DataFrame df:
  1. 删除行:
输出结果:
  1. 删除列:
输出结果:
请注意,这些操作不会影响原始的df对象,除非你设置了inplace=True。这种设计允许你在不修改原始数据的情况下进行数据的删除和转换操作。

© Regir 2023 - 2024