DataFrame常用方法

上期我们简要讲解了一下从excel读取数据到dataframe,这篇文章我们简要讲解一个dataframe的常用操作和方法:

方法 简要描述
head(n) 展示 DataFrame 的前 n 行数据。
tail(n) 展示 DataFrame 的最后 n 行数据。
info() 提供 DataFrame 的基本信息概览。
describe() 生成数值列的统计摘要。
shape 返回 DataFrame 的尺寸。
columns 列出所有的列名。
index 显示行标签的索引。
dtypes 获取各列的数据类型。
sort_values(by) 根据指定列对 DataFrame 进行排序。
sort_index() 按照行索引排序 DataFrame。
dropna() 移除包含缺失值的行或列。
fillna(value) 用特定值填充缺失值。
isnull() 检测 DataFrame 中的缺失值。
notnull() 检测 DataFrame 中的非缺失值。
loc[] 通过标签选取数据。
iloc[] 通过位置选取数据。
at[] 高效访问单个元素,基于标签。
iat[] 高效访问单个元素,基于整数位置。
apply(func) 将函数应用于 DataFrame 或 Series。
applymap(func) 将函数映射到 DataFrame 的每个元素。
groupby(by) 根据一个或多个列对数据进行分组。
pivot_table() 构建数据透视表。
merge() 结合两个 DataFrame。
concat() 连接多个 DataFrame 对象。
to_csv() 保存 DataFrame 到 CSV 文件。
to_excel() 保存 DataFrame 到 Excel 文件。
to_json() 将 DataFrame 转换为 JSON 格式。
to_sql() 将 DataFrame 写入 SQL 数据库。
query() 用类似 SQL 的表达式查询 DataFrame。
duplicated() 标识重复的行。
drop_duplicates() 删除重复的行。
set_index() 设定新的索引列。
reset_index() 重置索引为默认整数索引。
transpose() 交换 DataFrame 的行和列。

函数目录

head(n)


head(n) 方法

head() 是 Pandas 库中 DataFrame 和 Series 对象的一个方法,用于返回数据集的前 n 行。这个方法非常适合快速检查数据集的一小部分,以了解其结构和内容,而无需查看整个数据集。

如果未指定参数 n,则默认返回前 5 行。

下面是一个使用 head() 方法的例子:

import pandas as pd

# 假设我们有一个 CSV 文件 'data.csv'
df = pd.read_csv('data.csv')

# 使用 head() 方法来查看 DataFrame 的前几行
# 默认显示前五行
first_few_rows_default = df.head()

# 如果想要查看不同的行数,可以传递一个整数参数 n 给 head()
# 下面的例子将展示前 10 行
first_ten_rows = df.head(10)

print(first_few_rows_default)
print(first_ten_rows)

这段代码首先导入了 Pandas 库,并读取了一个名为 ‘data.csv’ 的文件到一个 DataFrame 中。然后它使用 head() 方法两次:第一次不带参数,因此它将打印出 DataFrame 的前五行;第二次调用时指定了参数 10,所以它会打印出前 10 行。

tail(n)

tail(n) 方法

tail() 是 Pandas 库中 DataFrame 和 Series 对象的一个方法,用于返回数据集的最后 n 行。这个方法非常适合快速检查数据集的结尾部分,对于确认数据加载是否完整或者查看最近的数据记录特别有用。

如果未指定参数 n,则默认返回最后 5 行。

下面是一个使用 tail() 方法的例子:

import pandas as pd

# 假设我们有一个 CSV 文件 'data.csv'
df = pd.read_csv('data.csv')

# 使用 tail() 方法来查看 DataFrame 的最后几行
# 默认显示最后五行
last_few_rows_default = df.tail()

# 如果想要查看不同的行数,可以传递一个整数参数 n 给 tail()
# 下面的例子将展示最后 10 行
last_ten_rows = df.tail(10)

print("默认显示的最后五行:")
print(last_few_rows_default)
print("\n显示的最后十行:")
print(last_ten_rows)

这段代码首先导入了 Pandas 库,并读取了一个名为 ‘data.csv’ 的文件到一个 DataFrame 中。然后它使用 tail() 方法两次:第一次不带参数,因此它将打印出 DataFrame 的最后五行;第二次调用时指定了参数 10,所以它会打印出最后 10 行。

info()

info() 方法

info() 是 Pandas 库中 DataFrame 和 Series 对象的一个方法,用于打印有关 DataFrame 或 Series 的简要总结信息。这个方法对于快速检查数据集的结构和完整性非常有用,因为它提供了每一列的数据类型、非空值的数量以及使用的内存总量等信息。

下面是一个使用 info() 方法的例子:

import pandas as pd

# 假设我们有一个 CSV 文件 'data.csv'
df = pd.read_csv('data.csv')

# 使用 info() 方法来获取 DataFrame 的基本信息
df_info = df.info()

print("DataFrame的基本信息:")
print(df_info)

执行这段代码后,将会输出如下信息:

  • DataFrame 中每列的名称及其数据类型(dtype)。
  • 每列中的非空值数量,这有助于识别可能存在缺失值的列。
  • DataFrame 的索引范围。
  • 所使用的内存消耗,包括近似值。
  • 如果 DataFrame 包含混合类型的数据,info() 也会指出这一点。

describe()


describe() 方法

describe() 是 Pandas 库中 DataFrame 和 Series 对象的一个方法,用于生成描述性统计数据。这些统计数据总结了数据集的中心趋势、分散性和形状,不包括 NaN 或其他非数值型数据。

对于数值型数据,describe() 默认会返回以下统计信息:

  • count: 非空值的数量。
  • mean: 平均数。
  • std: 标准差,衡量数值分布的离散程度。
  • min: 最小值。
  • 25%: 第一四分位数(Q1),即下四分位数。
  • 50%: 第二四分位数(Q2)或中位数。
  • 75%: 第三四分位数(Q3),即上四分位数。
  • max: 最大值。

对于对象类型的数据(如字符串或时间戳),它将提供不同的统计信息,例如唯一值的数量和最频繁出现的值等。

下面是一个使用 describe() 方法的例子:

import pandas as pd

# 假设我们有一个 CSV 文件 'data.csv'
df = pd.read_csv('data.csv')

# 使用 describe() 方法来获取 DataFrame 的描述性统计
description = df.describe()

print("DataFrame的描述性统计:")
print(description)

这段代码首先导入了 Pandas 库,并读取了一个名为 ‘data.csv’ 的文件到一个 DataFrame 中。然后调用 describe() 方法来打印出关于 DataFrame 的描述性统计信息。

如果想要对特定列或者不同类型的列应用 describe(),可以传递参数给这个方法。例如,可以通过指定 include='all' 来获取所有列的描述性统计,包括分类数据;也可以通过传递列表来选择特定的数据类型,如 include=['object', 'float64']

shape属性

shape 属性

shape 是 Pandas 库中 DataFrame 和 Series 对象的一个属性,不是方法,它返回一个表示对象尺寸的元组。对于 DataFrame 来说,这个元组的第一个元素是行的数量,第二个元素是列的数量。这有助于快速了解数据集的大小。

下面是一个使用 shape 属性的例子:

import pandas as pd

# 假设我们有一个 CSV 文件 'data.csv'
df = pd.read_csv('data.csv')

# 使用 shape 属性来获取 DataFrame 的维度
dimensions = df.shape

print("DataFrame的维度 (行数, 列数):")
print(dimensions)

执行这段代码后,将会输出如下信息:

  • DataFrame 中的行数和列数,格式为 (行数, 列数)。

shape 属性是非常直接且高效的方式来获取 DataFrame 或 Series 的大小信息。这对于初步检查数据集是否符合预期(例如,在加载或处理数据之后),以及在编写依赖于特定数据集大小的代码时非常有用。

如果只需要获取行数或列数,可以直接访问元组的第一个或第二个元素,例如 df.shape[0] 代表行数,df.shape[1] 代表列数。

columns属性

columns 属性

columns 是 Pandas 库中 DataFrame 对象的一个属性,它返回一个包含 DataFrame 中所有列名的索引对象(Index object)。这个属性对于了解数据集的结构、检查列名以及进行基于列的操作非常有用。

下面是一个使用 columns 属性的例子:

import pandas as pd

# 假设我们有一个 CSV 文件 'data.csv'
df = pd.read_csv('data.csv')

# 使用 columns 属性来获取 DataFrame 的列名
column_names = df.columns

print("DataFrame的列名:")
print(column_names)

执行这段代码后,将会输出如下信息:

  • DataFrame 中所有列的名字,格式为一个 Index 对象,例如 Index(['col1', 'col2', 'col3'], dtype='object')

columns 属性不仅可以用来查看列名,还可以用于修改列名。可以通过直接赋值给 columns 属性来重命名所有列,也可以通过 rename() 方法来更改特定列的名字。

此外,columns 属性也支持切片操作,可以用来选择部分列,这对于子集化数据或者在数据可视化和分析中选择感兴趣的特征非常有用。

下面是一个修改列名的例子:

# 重命名所有列
df.columns = ['new_col1', 'new_col2', 'new_col3']

# 或者,使用 rename() 方法更改特定列的名字
df.rename(columns={'old_name': 'new_name'}, inplace=True)

print("重命名后的列名:")
print(df.columns)

index 属性

index 是 Pandas 库中 DataFrame 和 Series 对象的一个属性,它返回一个表示对象索引(行标签)的 Index 对象。这个属性对于了解数据集的结构、检查行标签以及进行基于索引的操作非常有用。

Index 对象可以包含各种类型的数据,例如整数、字符串、时间戳等,并且它是有序的,意味着索引值在 DataFrame 或 Series 中的顺序是固定的。

下面是一个使用 index 属性的例子:

import pandas as pd

# 创建一个简单的 DataFrame
data = {'col1': [1, 2], 'col2': [3, 4]}
df = pd.DataFrame(data)

# 使用 index 属性来获取 DataFrame 的索引
indices = df.index

print("DataFrame的索引:")
print(indices)

执行这段代码后,将会输出如下信息:

  • DataFrame 中所有行的索引,格式为一个 Index 对象,例如 RangeIndex(start=0, stop=2, step=1)

index 属性不仅可以用来查看索引,还可以用于设置自定义索引。可以通过直接赋值给 index 属性来更改现有的索引,也可以通过 set_index() 方法来设置某列作为新的索引。

下面是一个设置自定义索引的例子:

# 设置自定义索引
df.index = ['row1', 'row2']

# 或者,使用 set_index() 方法将某一列设置为索引
df.set_index('col1', inplace=True)

print("设置后的索引:")
print(df.index)

dtypes 属性

dtypes 是 Pandas 库中 DataFrame 和 Series 对象的一个属性,它返回一个 Series,其中包含了 DataFrame 或 Series 中每一列的数据类型。了解数据类型对于确保数据被正确处理和分析非常重要。

在 Pandas 中,常见的数据类型包括:

  • int64: 用于表示整数。
  • float64: 用于表示浮点数或小数。
  • object: 通常用于表示字符串或其他 Python 对象。
  • bool: 用于表示布尔值(True 或 False)。
  • datetime64[ns]: 用于表示日期时间戳。
  • timedelta[ns]: 用于表示两个 datetime64[ns] 类型的时间差。
  • category: 用于表示分类数据。

下面是一个使用 dtypes 属性的例子:

import pandas as pd

# 假设我们有一个 CSV 文件 'data.csv'
df = pd.read_csv('data.csv')

# 使用 dtypes 属性来获取 DataFrame 的每列数据类型
column_types = df.dtypes

print("DataFrame的每列数据类型:")
print(column_types)

这段代码首先导入了 Pandas 库,并读取了一个名为 ‘data.csv’ 的文件到一个 DataFrame 中。然后调用 dtypes 属性来打印出关于 DataFrame 每一列的数据类型。

dtypes 属性是检查和验证数据集是否按照预期格式加载的有效工具。如果数据类型不符合预期,可能需要进行数据清洗或转换以确保后续分析的准确性。例如,如果一个应该包含数值的列被错误地识别为对象类型,那么你可能需要使用 pd.to_numeric() 方法或者其他合适的方法将其转换为正确的数据类型。

此外,dtypes 属性也可以帮助优化内存使用,通过选择更高效的数据类型(如 int32 而不是 int64),可以在不影响数据分析结果的情况下减少内存消耗。

sort_values(by) 方法

sort_values() 是 Pandas 库中 DataFrame 和 Series 对象的一个方法,用于按照一个或多个列的值对数据进行排序。此方法非常有用,可以帮助用户快速地根据特定列的数据来组织和分析数据集。

语法:

DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False, key=None)

参数:

  • by: 一个字符串或字符串列表,表示要排序的列名。
  • axis: {0 或 ‘index’, 1 或 ‘columns’},默认为 0。轴向选择:0 表示按行排序(默认),1 表示按列排序。
  • ascending: 布尔值或布尔值列表,默认为 True。是否升序排列;如果为 False,则降序排列。
  • inplace: 布尔值,默认为 False。如果为 True,则在原对象上进行排序,而不是返回一个新的已排序的对象。
  • kind: {‘quicksort’, ‘mergesort’, ‘heapsort’, ‘stable’},默认为 ‘quicksort’。选择排序算法。
  • na_position: {‘first’, ‘last’},默认为 ‘last’。决定缺失值的位置:’first’ 将 NaN 放在最前面,’last’ 放在最后面。
  • ignore_index: 布尔值,默认为 False。如果为 True,则忽略原始索引,赋予新排序后的对象一个从 0 开始的默认整数索引。
  • key: 可选的函数或函数列表,默认为 None。应用于每个值以确定排序顺序的函数。

使用示例:

import pandas as pd

# 创建一个简单的 DataFrame
data = {
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [24, 42, 36],
    'score': [88.5, 79.0, 93.0]
}
df = pd.DataFrame(data)

# 按照 'age' 列升序排序
sorted_df = df.sort_values(by='age')

print("按照 'age' 升序排序后的 DataFrame:")
print(sorted_df)

# 按照 'score' 列降序排序,并且设置 inplace 为 True
df.sort_values(by='score', ascending=False, inplace=True)

print("\n按照 'score' 降序排序后的 DataFrame (inplace):")
print(df)

上述代码展示了如何使用 sort_values() 方法根据指定的列对 DataFrame 进行排序。你可以通过调整参数来控制排序的行为,例如排序的方向、是否在原对象上执行排序等。

当需要根据多列排序时,可以传递一个包含多个列名的列表给 by 参数。这样可以实现先按第一列排序,若遇到相同值再按第二列排序,以此类推。

sort_index() 方法

sort_index() 是 Pandas 库中 DataFrame 和 Series 对象的一个方法,用于按照索引(行标签)对数据进行排序。此方法可以帮助用户根据特定的顺序来组织数据集,比如按照时间序列或者自定义的索引顺序。

语法:

DataFrame.sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, ignore_index=False, key=None)

参数:

  • axis: {0 或 ‘index’, 1 或 ‘columns’},默认为 0。轴向选择:0 表示按行索引排序(默认),1 表示按列索引排序。
  • level: 整数或字符串,可选。如果索引是分层索引(MultiIndex),则指定要排序的层级。
  • ascending: 布尔值,默认为 True。是否升序排列;如果为 False,则降序排列。
  • inplace: 布尔值,默认为 False。如果为 True,则在原对象上进行排序,而不是返回一个新的已排序的对象。
  • kind: {‘quicksort’, ‘mergesort’, ‘heapsort’, ‘stable’},默认为 ‘quicksort’。选择排序算法。
  • na_position: {‘first’, ‘last’},默认为 ‘last’。决定缺失值的位置:’first’ 将 NaN 放在最前面,’last’ 放在最后面。
  • sort_remaining: 布尔值,默认为 True。仅当 level 被指定且为 MultiIndex 时使用。如果为 True,则所有其他层级也将被排序。
  • ignore_index: 布尔值,默认为 False。如果为 True,则忽略原始索引,赋予新排序后的对象一个从 0 开始的默认整数索引。
  • key: 可选的函数,默认为 None。应用于每个值以确定排序顺序的函数。

使用示例:

import pandas as pd

# 创建一个带有非默认索引的简单 DataFrame
data = {
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [24, 42, 36]
}
df = pd.DataFrame(data, index=[3, 1, 2])

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

# 按照索引升序排序
sorted_df = df.sort_index()

print("\n按照索引升序排序后的 DataFrame:")
print(sorted_df)

# 按照索引降序排序,并且设置 inplace 为 True
df.sort_index(ascending=False, inplace=True)

print("\n按照索引降序排序后的 DataFrame (inplace):")
print(df)

上述代码展示了如何使用 sort_index() 方法根据索引对 DataFrame 进行排序。你可以通过调整参数来控制排序的行为,例如排序的方向、是否在原对象上执行排序等。

当处理具有多层级索引的数据时,level 参数特别有用,可以指定在哪个层级上进行排序。此外,如果需要对列索引进行排序,可以通过将 axis 参数设置为 1 来实现。

dropna() 方法

dropna() 是 Pandas 库中 DataFrame 和 Series 对象的一个方法,用于从数据集中移除含有缺失值(NaN 或 None)的行或列。处理缺失数据是数据分析中的一个重要步骤,因为缺失值可能会影响分析结果的准确性。

语法:

DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

参数:

  • axis: {0 或 ‘index’, 1 或 ‘columns’},默认为 0。轴向选择:0 表示按行检查并删除包含缺失值的行(默认),1 表示按列检查并删除包含缺失值的列。
  • how: {‘any’, ‘all’},默认为 ‘any’。确定当满足什么条件时删除行或列:
    • ‘any’: 如果存在任何缺失值,则删除该行或列。
    • ‘all’: 只有当所有值都是缺失值时,才删除该行或列。
  • thresh: 整数,可选。需要非NA/null值的最小数量。例如,如果设置为2,则只有在一行或一列中有至少2个非缺失值时,才会保留该行或列。
  • subset: 数组状序列,可选。要检查缺失值的行或列标签。对于 DataFrame,axis=0 时,表示要检查的列;axis=1 时,表示要检查的行。
  • inplace: 布尔值,默认为 False。如果为 True,则在原对象上进行操作,而不是返回一个新的对象。

使用示例:

import pandas as pd
import numpy as np

# 创建一个带有缺失值的简单 DataFrame
data = {
    'A': [1, 2, np.nan],
    'B': [5, np.nan, np.nan],
    'C': [1, 2, 3]
}
df = pd.DataFrame(data)

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

# 删除包含任何缺失值的行
cleaned_df = df.dropna()

print("\n删除包含任何缺失值的行后的 DataFrame:")
print(cleaned_df)

# 删除包含所有缺失值的列
cleaned_df_columns = df.dropna(axis=1, how='all')

print("\n删除包含所有缺失值的列后的 DataFrame:")
print(cleaned_df_columns)

# 在指定列中删除包含任何缺失值的行
cleaned_df_subset = df.dropna(subset=['A'])

print("\n在列 'A' 中删除包含任何缺失值的行后的 DataFrame:")
print(cleaned_df_subset)

上述代码展示了如何使用 dropna() 方法根据不同的参数配置来移除数据集中的缺失值。你可以通过调整参数来控制哪些行或列应该被删除,以及是否在原对象上执行这些更改。

除了直接删除缺失值外,还可以考虑其他策略来处理缺失数据,比如填充缺失值(使用 fillna() 方法)、插值、预测等,具体取决于数据特性和分析目的。

fillna(value) 方法

fillna() 是 Pandas 库中 DataFrame 和 Series 对象的一个方法,用于填充数据集中缺失值(NaN 或 None)。处理缺失数据是数据分析中的一个重要步骤,因为缺失值可能会影响分析结果的准确性。通过使用 fillna(),可以采用多种策略来填补这些缺失值,从而确保数据集的完整性和一致性。

语法:

DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)

参数:

  • value: 单个值、字典或 Series。用来填充缺失值的标量值、字典或 Series。如果是一个字典,则键应该对应列标签,值则是用于填充该列的值;如果是 Series,则根据索引进行匹配填充。
  • method: {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None},默认为 None。指定填充的方法:
    • ‘ffill’ 或 ‘pad’: 使用前一个非缺失值向前填充。
    • ‘bfill’ 或 ‘backfill’: 使用后一个非缺失值向后填充。
  • axis: {0 或 ‘index’, 1 或 ‘columns’},默认为 None。轴向选择:0 表示沿行方向填充(默认),1 表示沿列方向填充。
  • inplace: 布尔值,默认为 False。如果为 True,则在原对象上进行操作,而不是返回一个新的对象。
  • limit: 整数,可选。连续填充的最大数量。仅当指定了 method 参数时有效。
  • downcast: 字典,可选。指定是否尝试将数据类型降级到更小的数据类型(例如,从浮点数降到整数)。

使用示例:

import pandas as pd
import numpy as np

# 创建一个带有缺失值的简单 DataFrame
data = {
    'A': [1, 2, np.nan],
    'B': [5, np.nan, np.nan],
    'C': [1, 2, 3]
}
df = pd.DataFrame(data)

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

# 使用标量值填充所有缺失值
filled_df_scalar = df.fillna(0)

print("\n使用标量值 0 填充后的 DataFrame:")
print(filled_df_scalar)

# 使用字典按列填充缺失值
filled_df_dict = df.fillna({'A': 0, 'B': 5})

print("\n使用字典按列填充缺失值后的 DataFrame:")
print(filled_df_dict)

# 按行向前填充缺失值
filled_df_ffill = df.fillna(method='ffill')

print("\n按行向前填充缺失值后的 DataFrame:")
print(filled_df_ffill)

# 按列向后填充缺失值,并限制连续填充的数量为 1
filled_df_bfill_limit = df.fillna(method='bfill', axis=1, limit=1)

print("\n按列向后填充缺失值 (每列最多填充一次) 后的 DataFrame:")
print(filled_df_bfill_limit)

上述代码展示了如何使用 fillna() 方法根据不同的参数配置来填充数据集中的缺失值。你可以通过调整参数来控制哪些值应该被用作填充值,以及是否在原对象上执行这些更改。

除了直接填充特定值外,还可以考虑其他策略来处理缺失数据,比如使用统计方法计算平均值、中位数等,或者基于机器学习模型预测缺失值。具体取决于数据特性和分析目的。

isnull() 方法

isnull() 是 Pandas 库中 DataFrame 和 Series 对象的一个方法,用于检测数据集中是否存在缺失值(NaN 或 None)。该方法返回一个与原始对象具有相同形状的布尔值对象,其中每个元素表示对应位置的数据是否为缺失值。对于非缺失值,结果为 False;对于缺失值,结果为 True

语法:

DataFrame.isnull()

参数:

  • 此方法没有参数,直接调用即可。

使用示例:

import pandas as pd
import numpy as np

# 创建一个带有缺失值的简单 DataFrame
data = {
    'A': [1, 2, np.nan],
    'B': [5, np.nan, np.nan],
    'C': [1, 2, 3]
}
df = pd.DataFrame(data)

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

# 检测缺失值
missing_values = df.isnull()

print("\n检测缺失值后的布尔 DataFrame:")
print(missing_values)

上述代码展示了如何使用 isnull() 方法来识别数据集中的缺失值。输出的结果是一个布尔类型的 DataFrame,其中每一个 True 表示对应位置有一个缺失值,而 False 则表示存在有效数据。

应用:

  • 统计缺失值数量:可以结合 sum() 方法来统计每一列或每一行中缺失值的数量。
  • 定位缺失值:可以通过布尔索引来筛选出包含缺失值的行或列。
  • 数据清洗:作为数据清洗流程的一部分,isnull() 帮助识别哪些地方需要处理缺失值,比如通过 dropna() 删除缺失值或者 fillna() 填充缺失值。

进一步操作:

# 统计每列中缺失值的数量
missing_counts = df.isnull().sum()

print("\n每列中缺失值的数量:")
print(missing_counts)

# 筛选出至少有一处缺失值的行
rows_with_missing = df[df.isnull().any(axis=1)]

print("\n至少有一处缺失值的行:")
print(rows_with_missing)

notnull() 方法

notnull() 是 Pandas 库中 DataFrame 和 Series 对象的一个方法,用于检测数据集中是否存在非缺失值(即不是 NaN 或 None 的值)。该方法返回一个与原始对象具有相同形状的布尔值对象,其中每个元素表示对应位置的数据是否为有效值。对于非缺失值,结果为 True;对于缺失值,结果为 False

语法:

DataFrame.notnull()

参数:

  • 此方法没有参数,直接调用即可。

使用示例:

import pandas as pd
import numpy as np

# 创建一个带有缺失值的简单 DataFrame
data = {
    'A': [1, 2, np.nan],
    'B': [5, np.nan, np.nan],
    'C': [1, 2, 3]
}
df = pd.DataFrame(data)

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

# 检测非缺失值
non_missing_values = df.notnull()

print("\n检测非缺失值后的布尔 DataFrame:")
print(non_missing_values)

上述代码展示了如何使用 notnull() 方法来识别数据集中的非缺失值。输出的结果是一个布尔类型的 DataFrame,其中每一个 True 表示对应位置有一个有效值,而 False 则表示存在缺失值。

应用:

  • 统计非缺失值数量:可以结合 sum() 方法来统计每一列或每一行中非缺失值的数量。
  • 定位非缺失值:可以通过布尔索引来筛选出不包含缺失值的行或列。
  • 数据清洗:作为数据清洗流程的一部分,notnull() 帮助识别哪些地方有有效数据,这对于确保数据分析和建模的准确性非常重要。

进一步操作:

# 统计每列中非缺失值的数量
non_missing_counts = df.notnull().sum()

print("\n每列中非缺失值的数量:")
print(non_missing_counts)

# 筛选出没有任何缺失值的行
rows_without_missing = df[df.notnull().all(axis=1)]

print("\n没有任何缺失值的行:")
print(rows_without_missing)

结尾

由于篇幅限制,(虽然我也不明白,自己建的博客有什么篇幅限制…)leon就先分个上下篇。可以看到这里面的函数属性方法什么的介绍的都很简单,基本上就是语法加示例,没有展开说明,我估计展开说明就能出书了。主要目的就是为了让大家了解pandas的函数作用,具体还是得敲代码应用,如果有兴趣系统性学习pandas,我推荐《pandas数据处理与分析》(耿远昊),作者打钱啊!

大家敬请期待,DataFrame常用方法(下)!

文末声明:

您必须遵守关于,您可以随意转发/引用,但要注明原作者Leon或设置本文跳转连接,并且您必须在文中包含或提醒浏览者遵守作者声明
欢迎关注公众号获取第二手文章!高效工作法

暂无评论

发送评论 编辑评论


				
上一篇
下一篇