Python---数据分析(Pandas八:二维数组DataFrame数据操作一: 数据清洗,数据转换)

embedded/2025/3/26 7:16:34/

一、 数据清洗

1.1、 isnull()

        用于检测 DataFrame 中的缺失值,它会返回一个相同形状的布尔型 DataFrame,其中每个元素表示原始 DataFrame 中相应位置的元素是否是缺失 值。

python">import pandas as pd
import numpy as np# 创建一个包含缺失值的 DataFrame
df = pd.DataFrame({'A': [1, 2, np.nan],'B': [4, np.nan, 6],'C': [7, 8, 9]
})# 打印原始DataFrame
print(df)# 使用 isnull() 方法检测缺失值
missing_values = df.isnull()print(missing_values)

1.2、dropna()

        用于删除 DataFrame 中的缺失值。

python">DataFrame.dropna(axis=0, how=any, thresh=_NoDefault.no_default, subset=None, inplace=False, ignore_index=False)
描述说明
axis{0 或 ‘index’, 1 或 ‘columns’},默认为 0。0表示按行删除,1表示按列删 除
how

{‘any’, ‘all’},默认为 ‘any’。

‘any’:如果行或列中的任意一个值是 NaN,就删除该行或列。

‘all’:如果行或列中的所有值都是 NaN,才删除该行或列。

thresh指定每行或每列至少需要有多少个非缺失值才能保留。如果设置此参 数,how 参数将被忽略。
subset指定在哪些列中搜索缺失值。如果未指定,则在所有列中搜索。
inplace是否修改 DataFrame 而不是创建新的 DataFrame。
ignore_index布尔值,默认为 False。如果为 True,则不保留原始 DataFrame 的索引
python">import pandas as pd
import numpy as np# 创建一个包含缺失值的 DataFrame
df = pd.DataFrame({'A': [1, np.nan, np.nan],'B': [4, np.nan, 6],'C': [7, 8, 9]
})# 打印原始DataFrame
print(df)# 删除任何含有 NaN 值的行
df_cleaned = df.dropna(subset=['B'])print(df_cleaned)

1.3、fillna()

        用于填充 DataFrame 中的缺失值。

python">DataFrame.fillna(value=None, *, method=None, axis=0, inplace=False, limit=None)
描述说明
value填充值,可以是单个值,也可以是字典(对不同的列填充不同的值),或 者一个 Series。
method

{‘bfill’, ‘ffill’},默认为无默认值。

‘bfill’ 或 ‘backfill’:使用下一个有效观测值填充。

{0 或 ‘index’, 1 或 ‘columns’},默认为0。

axis{0 或 ‘index’, 1 或 ‘columns’},默认为0。
inplace布尔值,默认为 False。如果为 True,则在原地修改 DataFrame 而不 返回新的 DataFrame。
limitint,默认为无默认值。如果指定了method,则该参数限制连续填充的 数量。
python">import pandas as pd
import numpy as np# 创建一个包含缺失值的 DataFrame
df = pd.DataFrame({'A': [1, 2, np.nan],'B': [np.nan, np.nan, 6],'C': [7, np.nan, 9]
})# 打印原始DataFrame
print(df)# 使用固定值填充缺失值
df_filled_value = df.fillna(value=0, limit=1, axis=1)
print(df_filled_value)# 使用字典填充
data = {'A': 'a','B': 'b','C': 'c'
}
df_filled_dict = df.fillna(value=data)
print(df_filled_dict)# 使用Series填充
data_series = pd.Series(['a', 'b', 'c'], ['A', 'B', 'C'])
df_filled_series = df.fillna(value=data_series)
print(df_filled_series)# 使用前一个有效观测值填充缺失值
df_filled_ffill = df.fillna(method='ffill')
print(df_filled_ffill)# 使用后一个有效观测值填充缺失值
df_filled_bfill = df.fillna(method='bfill', axis=1)
print(df_filled_bfill)

1.4、drop_duplicates()

        用于删除 DataFrame 中的重复行。

python">DataFrame.drop_duplicates(subset=None, keep='first', inplace=False, ignore_index=False)
描述说明
subset指定要检查重复的列名或列名列表,默认值为 None,表示检查所有 列。
keep

{‘first’, ‘last’, False},默认为 ‘first’。

‘first’:保留第一次出现的重复项。

‘last’:保留最后一次出现的重复项。

False:删除所有重复项。

inplace是否修改 DataFrame 而不是创建新的 DataFrame。
ignore_index是否重置索引值。
python">import pandas as pd# 创建一个包含重复行的 DataFrame
df = pd.DataFrame({'A': [1, 1, 2, 2, 3, 3],'B': [1, 1, 2, 3, 3, 3],'C': [1, 1, 2, 2, 3, 3]
})# 打印原始DataFrame
print(df)# 删除重复行,保留第一次出现的重复项
df_dedup_first = df.drop_duplicates(keep=False)
print(df_dedup_first)# 根据指定列删除重复行
df_dedup_column = df.drop_duplicates(subset=['A'])
print(df_dedup_column)# 删除重复行,保留最后一次出现的重复项
df_dedup_last = df.drop_duplicates(keep='last')
print(df_dedup_last)# 删除所有重复行
df_dedup_all = df.drop_duplicates(keep=False)
print(df_dedup_all)

二、 数据转换

2.1、replace()

        用于替换 DataFrame 中的值。

python">DataFrame.replace(to_replace=None, value=_NoDefault.no_default, inplace=False, limit=None, regex=False, method=_NoDefault.no_default)
描述说明
to_replace被替换的内容,可以是 scalar, list, dict, regex。如果是字典,则键 是要替换的值,值是相应的替换值。
value替换后的值。可以是单个值、列表或数组,与 to_replace 长度相同。
inplace是否在原地修改 DataFrame。
limit限制替换的数量。可以是整数,表示最多替换多少个值。
regex是否使用正则表达式进行匹配。
method

'pad' 或 'ffill':使用前面的数据向后填充。

'backfill' 或 'bfill':使用后面的数据向前填充。

python">import pandas as pd# 创建一个 DataFrame
df = pd.DataFrame({'A': [1, 2, 1, 4, 5],'B': ['a', 'b', 'a', 'b', 'a']
})data = {1: 20
}# 用数字 100 替换所有的 1
df_replaced = df.replace(to_replace=data)# 用字符串 'z' 替换所有的 'a'
df_replaced = df.replace(to_replace='a', value='z')# 使用字典替换多个值
df_replaced = df.replace({2: 200,'b': 'y'
})# 使用正则表达式替换
df_replaced = df.replace(to_replace=r'^a$', value='z', regex=True)

2.2、pivot()

        用于改变表格形状格式。

python">DataFrame.pivot(columns, index=typing.Literal[<no_default>], values=typing.Literal[<no_default>])
描述说明
columns作为新 DataFrame 的行索引的列名。可以是单个列名或列名列表。
index作为新 DataFrame 的列标签的列名。可以是单个列名或列名列表。
values作为新 DataFrame 的值的列名。可以是单个列名或列名列表。
python">import pandas as pd# 创建一个DataFrame
df = pd.DataFrame({'foo': ['one', 'one', 'one', 'two', 'two', 'two'],'bar': ['A', 'B', 'C', 'A', 'B', 'C'],'baz': [1, 2, 3, 4, 5, 6],'zoo': ['x', 'y', 'z', 'q', 'w', 't']
})# 打印原始DataFrame
print(df)# 使用pivot方法对DataFrame进行重塑,其中foo作为行索引,bar作为列索引,baz作为值
res1 = df.pivot(index='foo', columns='bar', values='baz')# # 打印重塑后的DataFrame
print(res1)# 使用pivot方法对DataFrame进行重塑,其中foo作为行索引,bar作为列索引,baz、zoo作为值
res2 = df.pivot(index='foo', columns='bar', values=['baz', 'zoo'])
# 打印重塑后的DataFrame
print(res2)

 

2.3、melt()

        用于改变表格形状格式。

python">DataFrame.melt(id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None, ignore_index=True)
描述说明
id_vars保持不变的列名或列名列表。
value_vars字符串或字符串列表,可选。要重塑的列名或列名列表。这些列的 值将被展平到新的行中。
var_name新的列名,用于存储原来列的名称。默认值为 None,表示使用默认名称
value_name字符串。新的列名,用于存储原来列的值。默认值为 'value'。
col_level整数或列标签,可选。如果 DataFrame 的列是多级索引,指定要使用的级别。默认值为 None,表示使用所有级别。
ignore_index是否忽略原来的索引,重新生成一个新的默认整数索引。默认值 为 True。
python">import pandas as pd# 创建一个DataFrame
df = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c'},'B': {0: 1, 1: 3, 2: 5},'C': {0: 2, 1: 4, 2: 6}
})# 打印原始DataFrame
print(df)# 使用melt方法对DataFrame进行重塑
res1 = df.melt(id_vars=['A'], value_vars=['B'],)# 打印重塑后的DataFrame
print(res1)

2.4、pivot_table()

        用于生成一个指定格式的数据透视表。

python">DataFrame.pivot_table(values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False, sort=True)
描述说明
values要聚合的列名或列名列表。如果未指定,则使用所有数值列。
index作为新 DataFrame 的行索引的列名或列名列表。
columns作为新 DataFrame 的列标签的列名或列名列表。
aggfunc

聚合函数,可以是:

单个函数(如 'mean'、 'sum'、 'count' 等)。

函数列表(如 ['mean', 'sum'])。

字典,键是列名,值是聚合函数。

fill_value用于填充缺失值的值。默认值为 None。
margins是否添加总计行和总计列。默认值为 False。
dropna是否从结果中删除包含缺失值的行。默认值为 True。
margins_name总计行和总计列的名称。默认值为 'All'。
observed是否仅显示已观察到的类别。默认值为 False。
sort是否对结果进行排序。默认值为 True。
python">import numpy as np
import pandas as pd# 创建一个DataFrame
df = pd.DataFrame({"A": ["foo", "foo", "foo", "foo", "foo","bar", "bar", "bar", "bar"],"B": ["one", "one", "one", "two", "two","one", "one", "two", "two"],"C": ["small", "large", "large", "small","small", "large", "small", "small","large"],"D": [1, 2, 2, 3, 3, 4, 5, 6, 7],"E": [2, 4, 5, 5, 6, 6, 8, 9, 9]
})# 打印原始DataFrame
print(df)# 使用pivot_table方法创建一个数据透视表
table = df.pivot_table(values=['D', 'E'], index=['A',], columns=['C'], aggfunc=np.sum, fill_value='a', margins=True, margins_name='test')# 打印数据透视表
print(table)

 

2.5、 astype()

        用于转换 DataFrame 中指定列的数据类型。

python">DataFrame.astype(dtype, copy=None, errors='raise')
描述说明
dtype新的数据类型,可以是字典或数据类型。如果是字典,则键是列名,值是 要转换为的数据类型。如果指定为单一数据类型,则所有列都将转换为该类型。
copy布尔值,默认为 本。如果为 None。如果为 True,则在转换数据之前创建数据的副 False,则尽可能地避免复制,但这可能会影响到输入数据的原始 DataFrame。如果为 None(默认值),则仅在需要时复制数据。
errors{‘raise’, ‘ignore’},默认为 ‘raise’。控制当转换失败时的行为。如果为 ‘raise’,则在无法转换数据时抛出异常;如果为 ‘ignore’,则在无法转换数据时保 持原始数据类型不变。
python">import pandas as pd# 创建一个示例 DataFrame
df = pd.DataFrame({'A': [1, 2, 3],'B': [4.5, 5.5, 6.5],'C': ['7', '8', '9']
})# 打印原始DataFrame
print(df)# 将列 'A' 转换为浮点数类型
df['A'] = df['A'].astype(float)# 使用字典将多列转换为不同的数据类型
# 将列 'B' 转换为整数类型,列 'C' 也转换为整数类型
df = df.astype({'B': int,'C': int
})# 打印转换后的DataFrame
print(df)# 打印DataFrame中各列的数据类型
print(df.dtypes)

 


http://www.ppmy.cn/embedded/174807.html

相关文章

e2studio开发RA4L1(15)----配置RTC时钟及显示时间

e2studio开发RA4L1.15--配置RTC时钟及显示时间 概述视频教学样品申请硬件准备参考程序源码下载新建工程工程模板保存工程路径芯片配置工程模板选择时钟设置UART配置UART属性配置设置e2studio堆栈e2studio的重定向printf设置R_SCI_UART_Open()函数原型回调函数user_uart_callbac…

Python----计算机视觉处理(Opencv:图像缩放)

图像缩放 与图像旋转里的缩放的原理一样&#xff0c;图像缩放的原理也是根据需要将原图像的像素数量增加或减少&#xff0c;并通 过插值算法来计算新像素的像素值。 导入模块 import cv2 输入图像 imgcv2.imread(lena.png) 图像缩放 img_sizecv2.resize(img,None,fx0.5,fy0.5,…

ubuntu20.04安装完显卡驱动后黑屏问题

笔记本安装完ubuntu20.04版本没有wifi怎么解决啊_运维-CSDN问答 1、重启电脑&#xff0c;在系统选择界面选择ubuntu advanced&#xff08;高级选项&#xff09;&#xff0c;然后选择带有括号的recovery mode&#xff0c;进入之后&#xff0c;在白框中选择root选项并进入&#…

Java EE(12)——初始网络

前言 随着软硬件的快速发展&#xff0c;计算机的通信模式已经由原来的独立模式&#xff08;计算机之间相互独立&#xff09;——>局域网通信&#xff08;同一局域网下的计算机可以通信&#xff09;——>广域网通信&#xff08;将多个局域网连接成范围更大的网络结构&…

VLAN综合实验报告

一、实验拓扑 网络拓扑结构包括三台交换机&#xff08;LSW1、LSW2、LSW3&#xff09;、一台路由器&#xff08;AR1&#xff09;以及六台PC&#xff08;PC1-PC6&#xff09;。交换机之间通过Trunk链路相连&#xff0c;交换机与PC、路由器通过Access或Hybrid链路连接。 二、实验…

论文笔记(七十三)Gemini Robotics: Bringing AI into the Physical World

Gemini Robotics: Bringing AI into the Physical World 文章概括1. 引言2. Gemini 2.0的具身推理2.1. 具身推理问答&#xff08;ERQA&#xff09;基准测试2.2. Gemini 2.0的具身推理能力2.3. Gemini 2.0支持零样本和少样本机器人控制 3. 使用 Gemini Robotics 执行机器人动作3…

VM虚拟机安装与配置Ubuntu Linux操作系统详细教程~

VM虚拟机安装与配置Ubuntu Linux操作系统详细教程~ 一、下载VM虚拟机二、软件介绍三、安装VM虚拟机四、下载Ubuntu镜像五、配置VM虚拟机(一) 典型(推荐)配置方式(二) 自定义(高级)配置方式六、安装Ubuntu 22.04 LTS 系统(一) 添加镜像源(二) 安装 Ubuntu 系统七、安装o…

【赵渝强老师】达梦数据库MPP集群的架构

为了支持海量数据存储和处理等方面的需求&#xff0c;为高端数据仓库提供解决方案&#xff0c;达梦数据库提供了大规模并行处理MPP架构&#xff0c;以极低的成本代价&#xff0c;提供高性能的并行计算。通过使用MPP可以解决以下问题&#xff1a; 需要较高的系统性能支持以支持…