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

一、 数据清洗

1.1、 isnull()

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

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 中的缺失值。

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 的索引
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 中的缺失值。

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,则该参数限制连续填充的 数量。
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 中的重复行。

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是否重置索引值。
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 中的值。

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':使用后面的数据向前填充。

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()

        用于改变表格形状格式。

DataFrame.pivot(columns, index=typing.Literal[<no_default>], values=typing.Literal[<no_default>])
描述说明
columns作为新 DataFrame 的行索引的列名。可以是单个列名或列名列表。
index作为新 DataFrame 的列标签的列名。可以是单个列名或列名列表。
values作为新 DataFrame 的值的列名。可以是单个列名或列名列表。
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()

        用于改变表格形状格式。

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。
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()

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

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。
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 中指定列的数据类型。

DataFrame.astype(dtype, copy=None, errors='raise')
描述说明
dtype新的数据类型,可以是字典或数据类型。如果是字典,则键是列名,值是 要转换为的数据类型。如果指定为单一数据类型,则所有列都将转换为该类型。
copy布尔值,默认为 本。如果为 None。如果为 True,则在转换数据之前创建数据的副 False,则尽可能地避免复制,但这可能会影响到输入数据的原始 DataFrame。如果为 None(默认值),则仅在需要时复制数据。
errors{‘raise’, ‘ignore’},默认为 ‘raise’。控制当转换失败时的行为。如果为 ‘raise’,则在无法转换数据时抛出异常;如果为 ‘ignore’,则在无法转换数据时保 持原始数据类型不变。
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.rhkb.cn/news/39634.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能汽车图像及视频处理方案,支持视频星轨拍摄能力

美摄科技作为智能汽车图像及视频处理领域的先行者&#xff0c;正以革新性的技术引领着行业的未来发展。美摄科技智能汽车图像及视频处理方案&#xff0c;一个集高效性、智能化、画质增强于一体的创新解决方案&#xff0c;旨在重塑智能汽车图像画质的新标准&#xff0c;并支持前…

Flask接口开发--GET接口

安装Flask 1.安装命令&#xff1a; pip3 install Flask2.查看Flask版本&#xff1a; pip3 show flask如图我的Flask版本号是2.0.3 项目创建 1、在PyCharm中&#xff0c;我们点击左上方的 file&#xff0c;选择 New Project&#xff0c;创建一个Flask项目。&#xff08;Py…

应用权限组列表

文章目录 使用须知位置相机麦克风通讯录日历运动数据身体传感器图片和视频音乐和音频跨应用关联设备发现和连接剪切板文件夹文件(deprecated) 使用须知 在申请目标权限前&#xff0c;建议开发者先阅读应用权限管控概述-权限组和子权限&#xff0c;了解相关概念&#xff0c;再合…

Python为Word文档添加书签并打包成exe

背景简述 由于一些工作场景&#xff0c;需要从多个Word文档中找到出现的关键词&#xff0c;并阅读关键词的上下文内容。文件可能几十个&#xff0c;手动操作太要命了。所以python尝试处理。 目录 背景简述思路第一步、功能实现结果验证 第二步、打包成exe2-1、基础准备2-2、打…

【MYSQL】索引和事务

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 本期内容讲解 MySQL 中的索引和事务&#xff0c;在学习的过程中&#xff0c;我们需要经常问自己为什么 文章目录 1. 索…

2021年蓝桥杯第十二届CC++大学B组真题及代码

目录 1A&#xff1a;空间&#xff08;填空5分_单位转换&#xff09; 2B&#xff1a;卡片&#xff08;填空5分_模拟&#xff09; 3C&#xff1a;直线&#xff08;填空10分_数学排序&#xff09; 4D&#xff1a;货物摆放&#xff08;填空10分_质因数&#xff09; 5E&#xf…

PicGo安装与配置-Gitee图床

1、 前言 平时使用Typora写文章,上传文章到第三方平台上去都要把图片一个一个上传上去,于是我就百度了有没有什么方法可以省略这一步骤,我发现Typora可以用PicGo+Gitee图床方式,这个挺容易的,我把安装的过程在此记录下来。 PicGo是一个用于快速上传图片并获取图片 URL 链…

html css js网页制作成品——HTML+CSS+js迪奥口红网站网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…

重学Java基础篇—如何优雅的删除HashMap元素

在Java中优雅地删除HashMap元素需要注意遍历时的安全性和代码的简洁性。 以下是几种推荐的方法&#xff1a; 1. 使用迭代器遍历并删除&#xff08;传统方式&#xff09; 在遍历时通过迭代器的remove() 方法删除元素&#xff0c;避免ConcurrentModificationException异常。 H…

26考研——图_图的遍历(6)

408答疑 文章目录 三、图的遍历图的遍历概述图的遍历算法的重要性图的遍历与树的遍历的区别图的遍历过程中的注意事项避免重复访问遍历算法的分类遍历结果的不唯一性 广度优先搜索广度优先搜索&#xff08;BFS&#xff09;概述BFS 的特点广度优先遍历的过程示例图遍历过程 BFS …

2025-03-24 学习记录--C/C++-PTA 习题7-6 统计大写辅音字母

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 习题7-6 统计大写辅音字母 英文辅音字母是除A、E、I、O、U以外的字母。本题要求编写程序&#xff0c;统计给…

在vitepress中使用vue组建,然后引入到markdown

在 VitePress 中&#xff0c;每个 Markdown 文件都被编译成 HTML&#xff0c;而且将其作为 Vue 单文件组件处理。这意味着可以在 Markdown 中使用任何 Vue 功能&#xff0c;包括动态模板、使用 Vue 组件或通过添加 <script> 标签为页面的 Vue 组件添加逻辑。 值得注意的…

常见中间件漏洞之一 ----【Tomcat】

中间件Tomcat介绍&#xff1a; tomcat是⼀个开源⽽且免费的jsp服务器&#xff0c;默认端⼝ : 8080&#xff0c;属于轻量级应⽤服务器。它可以实现 JavaWeb程序的装载&#xff0c;是配置JSP&#xff08;Java Server Page&#xff09;和JAVA系统必备的⼀款环境。 在历史上也披露…

Spring Cloud之负载均衡之LoadBalance

目录 负载均衡 问题 步骤 现象 什么是负载均衡&#xff1f; 负载均衡的一些实现 服务端负载均衡 客户端负载均衡 使用Spring Cloud LoadBalance实现负载均衡 负载均衡策略 ​编辑 ​编辑LoadBalancer原理 服务部署 准备环境和数据 服务构建打包 启动服务 上传J…

量化研究--小果聚宽交易系统上线高速服务器,提供源代码

文章链接量化研究--小果聚宽交易系统上线高速服务器&#xff0c;提供源代码https://mp.weixin.qq.com/s/HecSeAvmaCyVCsPhvxA0xg 今天大家反应以前的服务器比较慢&#xff0c;与200多人在使用这个系统&#xff0c;反应比较慢&#xff0c;实时数据请求服务器&#xff0c;服务器还…

蓝桥杯python组备考2(b站课程笔记)超详细

语法进阶 一、列表推导式 想讲解一下示例4到示例7的代码&#xff1a; 4、循环n次生成n个零放进列表中&#xff0c;其实也就是相当于[0]*n&#xff08;列表乘法&#xff0c;将原来的列表循环n次产生一个新的列表&#xff09;&#xff0c;接着在循环n次产生n个这样的列表&#x…

【大模型LLM第十四篇】Agent学习之anthropic-quickstarts Agent

前言 对于anthropic api的快速使用&#xff0c;在github上有几个example Customer Support Agent&#xff1a;由 Claude 提供支持的客户支持代理。该项目演示了如何利用 Claude 的自然语言理解和生成功能来创建可访问知识库的 AI 辅助客户支持系统。Financial Data Analyst &…

用DrissionPage升级网易云音乐爬虫:更稳定高效地获取歌单音乐(附原码)

一、传统爬虫的痛点分析 原代码使用requests re的方案存在以下局限性&#xff1a; 动态内容缺失&#xff1a;无法获取JavaScript渲染后的页面内容 维护成本高&#xff1a;网页结构变化需频繁调整正则表达式 反爬易触发&#xff1a;简单请求头伪造容易被识别 资源消耗大&am…

2025年渗透测试面试题总结- PingCAP安全工程师(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 PingCAP安全工程师 一、SQL注入判断数据库类型技术分析 1. 常规判断方法 2. 盲注场景下的判断 3. 补…

【加密社】如何创建自己的币圈工具站

需要准备的工作 1.域名 2.服务器 周末的时候主要弄了快讯这方面的代码 我这里用的是星球日报的api&#xff0c;也可以订阅他们的rss&#xff0c;这部分在github上是开源的 https://github.com/ODAILY 我这里用的是WordPressonenav主题&#xff0c;然后用小工具在主页展示&am…