利用Python进行数据清洗与预处理:Pandas的高级用法【第147篇—Pandas的高级用法】

👽发现宝藏

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。

利用Python进行数据清洗与预处理:Pandas的高级用法

在数据科学和机器学习领域,数据清洗和预处理是至关重要的步骤。Pandas库作为Python中最受欢迎的数据处理工具之一,提供了强大的功能来处理各种数据格式。本文将介绍Pandas的一些高级用法,帮助你更有效地进行数据清洗和预处理。

1. 数据清洗

数据清洗是指处理缺失值、异常值和重复值等问题,使数据集变得更加干净和可靠。下面是一些Pandas的高级技术,可以用来进行数据清洗:

处理缺失值

import pandas as pd

# 创建示例数据
data = {'A': [1, 2, None, 4],
        'B': [5, None, 7, 8]}
df = pd.DataFrame(data)

# 填充缺失值
df.fillna(method='ffill', inplace=True)  # 使用前向填充
print(df)

处理异常值

# 删除异常值
threshold = 3
df = df[(df < threshold).all(axis=1)]
print(df)

处理重复值

# 删除重复值
df.drop_duplicates(inplace=True)
print(df)

2. 数据预处理

数据预处理是为了使数据更适合模型训练,包括特征缩放、特征编码等。下面是一些Pandas的高级技术,可用于数据预处理:

特征缩放

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
scaled_features = scaler.fit_transform(df[['A', 'B']])
df[['A', 'B']] = scaled_features
print(df)

特征编码

# 使用get_dummies进行独热编码
df = pd.get_dummies(df, columns=['Categorical_Column'])
print(df)

时间序列处理

# 转换日期格式
df['Date'] = pd.to_datetime(df['Date'])
# 提取年份
df['Year'] = df['Date'].dt.year
print(df)

通过这些高级用法,你可以更轻松地进行数据清洗和预处理,为后续的数据分析和建模工作打下良好的基础。记得根据实际情况选择合适的方法,以保证数据质量和模型效果。

3. 多列操作与函数应用

Pandas提供了强大的方法来对多列进行操作,并能够轻松地应用自定义函数。下面是一些相关技术:

多列操作

# 添加新列
df['New_Column'] = df['A'] + df['B']

# 对多列进行统计计算
df['Sum'] = df[['A', 'B']].sum(axis=1)
print(df)

函数应用

# 定义自定义函数
def custom_function(x):
    return x * 2

# 应用函数到某一列
df['New_Column'] = df['A'].apply(custom_function)
print(df)

4. 数据合并与拼接

在处理多个数据集时,经常需要将它们合并或拼接起来。Pandas提供了便捷的方法来实现这一点:

数据合并

# 创建两个示例数据集
df1 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                    'A': ['A0', 'A1', 'A2', 'A3']})
df2 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                    'B': ['B0', 'B1', 'B2', 'B3']})

# 合并数据集
merged_df = pd.merge(df1, df2, on='key')
print(merged_df)

数据拼接

# 创建两个示例数据集
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3']})
df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
                    'B': ['B4', 'B5', 'B6', 'B7']})

# 拼接数据集
concatenated_df = pd.concat([df1, df2])
print(concatenated_df)

通过这些技术,你可以轻松地进行数据合并和拼接,实现更复杂的数据处理任务。

5. 数据分组与聚合

在数据分析中,常常需要对数据进行分组并进行聚合操作。Pandas提供了灵活的功能来实现这些操作:

数据分组

# 创建示例数据集
data = {'Category': ['A', 'B', 'A', 'B', 'A'],
        'Value': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)

# 按照Category列进行分组
grouped = df.groupby('Category')

# 对分组后的数据进行聚合操作
print(grouped.sum())  # 对每个分组求和
print(grouped.mean())  # 对每个分组求平均值

自定义聚合函数

# 定义自定义聚合函数
def custom_agg(x):
    return max(x) - min(x)

# 应用自定义聚合函数
print(grouped['Value'].agg(custom_agg))  # 对每个分组应用自定义聚合函数

6. 数据透视表与交叉表

Pandas还提供了数据透视表和交叉表功能,可以方便地对数据进行汇总和分析:

数据透视表

# 创建示例数据集
data = {'A': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'],
        'B': ['one', 'one', 'two', 'two', 'one', 'one'],
        'C': ['small', 'large', 'large', 'small', 'small', 'large'],
        'D': [1, 2, 2, 3, 3, 4]}
df = pd.DataFrame(data)

# 创建数据透视表
pivot_table = pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'], aggfunc=np.sum)
print(pivot_table)

交叉表

# 创建示例数据集
data = {'A': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'],
        'B': ['one', 'one', 'two', 'two', 'one', 'one'],
        'C': ['small', 'large', 'large', 'small', 'small', 'large']}
df = pd.DataFrame(data)

# 创建交叉表
cross_table = pd.crosstab(df['A'], df['B'])
print(cross_table)

通过这些功能,你可以轻松地对数据进行分组、聚合和分析,从而更深入地理解数据的特征和规律。

7. 缺失值处理的高级技巧

处理数据中的缺失值是数据清洗过程中的关键步骤之一。Pandas提供了一些高级技巧来处理缺失值:

插值填充

# 创建示例数据集
data = {'A': [1, 2, np.nan, 4],
        'B': [5, np.nan, 7, 8]}
df = pd.DataFrame(data)

# 使用插值填充缺失值
df.interpolate(inplace=True)
print(df)

使用模型填充

from sklearn.impute import KNNImputer

# 创建示例数据集
data = {'A': [1, 2, np.nan, 4],
        'B': [5, np.nan, 7, 8]}
df = pd.DataFrame(data)

# 使用KNN模型填充缺失值
imputer = KNNImputer(n_neighbors=2)
df_filled = pd.DataFrame(imputer.fit_transform(df), columns=df.columns)
print(df_filled)

8. 文本数据处理

Pandas还提供了处理文本数据的功能,可以进行字符串操作、正则表达式匹配等:

字符串操作

# 创建示例数据集
data = {'Text': ['foo', 'bar', 'baz']}
df = pd.DataFrame(data)

# 字符串方法操作
df['Text_Length'] = df['Text'].str.len()  # 计算字符串长度
df['Text_Upper'] = df['Text'].str.upper()  # 将字符串转换为大写
print(df)

正则表达式匹配

# 创建示例数据集
data = {'Text': ['foo123', 'bar456', 'baz789']}
df = pd.DataFrame(data)

# 正则表达式匹配
df['Digits'] = df['Text'].str.extract('(\d+)', expand=False)  # 提取数字
print(df)

通过这些技巧,你可以更加灵活地处理文本数据,挖掘其中的信息。

9. 数据可视化

除了数据处理外,Pandas还提供了数据可视化的功能,可以帮助你更直观地理解数据:

绘制折线图

# 创建示例数据集
data = {'Date': pd.date_range(start='2022-01-01', periods=10),
        'Value': np.random.randn(10)}
df = pd.DataFrame(data)

# 绘制折线图
df.plot(x='Date', y='Value', title='Time Series Data', xlabel='Date', ylabel='Value')
plt.show()

绘制柱状图

# 创建示例数据集
data = {'Category': ['A', 'B', 'C', 'D'],
        'Value': [10, 20, 30, 40]}
df = pd.DataFrame(data)

# 绘制柱状图
df.plot(kind='bar', x='Category', y='Value', title='Bar Chart', xlabel='Category', ylabel='Value')
plt.show()

绘制箱线图

# 创建示例数据集
data = {'Group': ['A', 'A', 'B', 'B'],
        'Value': np.random.randn(100)}
df = pd.DataFrame(data)

# 绘制箱线图
df.boxplot(by='Group', column='Value')
plt.title('Boxplot by Group')
plt.show()

通过数据可视化,你可以更加直观地观察数据的分布和趋势,为进一步的分析和决策提供依据。

10. 并行处理

对于大规模数据集,Pandas提供了并行处理的功能,可以加速数据处理过程:

# 创建示例数据集
data = {'A': np.random.randn(1000),
        'B': np.random.randn(1000),
        'C': np.random.randn(1000)}
df = pd.DataFrame(data)

# 并行处理
result = df.apply(lambda x: x**2, axis=1, raw=True)
print(result)

通过设置raw=True参数,可以启用并行处理,提高数据处理的效率。

11. 时间序列处理

Pandas提供了丰富的功能来处理时间序列数据,包括日期索引、时间重采样等:

创建日期索引

# 创建示例时间序列数据
dates = pd.date_range(start='2022-01-01', periods=5, freq='D')
data = {'Values': [1, 2, 3, 4, 5]}
df = pd.DataFrame(data, index=dates)
print(df)

时间重采样

# 按周重采样
weekly_resampled = df.resample('W').mean()
print(weekly_resampled)

移动窗口统计

# 计算滚动平均值
rolling_mean = df['Values'].rolling(window=2).mean()
print(rolling_mean)

时间序列处理能够帮助你更好地分析和预测时间相关的数据,对于金融、气象等领域的数据分析尤为重要。

12. 数据读写

Pandas还提供了丰富的功能来读取和写入各种数据格式:

读取CSV文件

# 读取CSV文件
df = pd.read_csv('data.csv')
print(df)

写入CSV文件

# 写入CSV文件
df.to_csv('output.csv', index=False)

Pandas支持读写多种数据格式,包括CSV、Excel、SQL数据库等,使得数据的导入和导出变得更加便捷。

总结

总的来说,本文介绍了Pandas库的一系列高级用法,涵盖了数据清洗与预处理、多列操作与函数应用、数据合并与拼接、数据分组与聚合、数据透视表与交叉表、缺失值处理的高级技巧、文本数据处理、数据可视化、并行处理、时间序列处理以及数据读写等方面。通过这些高级技巧和功能,读者可以更加灵活地处理和分析各种类型的数据,从而为数据科学和机器学习项目提供更加可靠的数据基础和支持。无论是初学者还是有经验的数据科学家,都可以从本文中获得启发和帮助,进一步提高数据处理和分析的效率。因此,掌握Pandas库的高级用法对于数据领域的从业者来说是非常重要的,希望本文对读者有所启发,激发大家对数据处理和分析的兴趣,欢迎继续深入学习和实践!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/476869.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

浅浅迈入C++门槛

从今天起&#xff0c;我要开始hello&#xff0c;world。 往后更要做到&#xff0c;拳打数据结构&#xff0c;脚踢Linux。 这就是江湖人的风范。 拼搏百天&#xff0c;我要学希普拉斯普拉斯。 C是在C的基础之上&#xff0c;容纳进去了面向对象编程思想&#xff0c;并增加了许…

基于单片机的四旋翼飞行器的设计与实现

摘 要:四旋翼飞行器可以垂直升降,应用于军事和民用领域,在飞行器的设计中,结合单片机进行设计,可以提升整体性能。基于此,本文探究基于单片机的四旋翼飞行器设计与实现,探索飞行器的硬件设计和软件设计方案,并且对系统的角速度算法以及姿态控制算法进行测试,最后对系…

【题目】【网络系统管理】2019年全国职业技能大赛高职组计算机网络应用赛项H卷

极安云科专注职业教育技能竞赛培训4年&#xff0c;包含信息安全管理与评估、网络系统管理、网络搭建等多个赛项及各大CTF模块培训学习服务。本团队基于赛项知识点&#xff0c;提供完整全面的系统性理论教学与技能培训&#xff0c;成立至今持续优化教学资源与讲师结构&#xff0…

【QT+QGIS跨平台编译】之八十五:【QGIS_Gui跨平台编译】—【错误处理:Qt5UiTools - Qt5UiTools】

文章目录 一、错误信息二、错误处理 一、错误信息 二、错误处理 定位到Qt5iTools目录。(例如&#xff1a;/Users/lucky/Qt/5.15.2/clang_64/lib&#xff09; 拷贝libQt5UiTools.a&#xff0c;粘贴为&#xff1a;libQt5UiTools_debug.a

基于Matlab的视频人体动作识别,Matlab实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码代做/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供…

【HM】STM32F407 HAL库 PWM

PWM简介 脉冲宽度调制&#xff08;PWM&#xff09; 是一种数字信号&#xff0c;最常用于控制电路。该信号在预定义的时间和速度中设置为高&#xff08;5v或3.3v&#xff09;和低&#xff08;0v&#xff09;。通常&#xff0c;我们将PWM的高电平称为1&#xff0c;低电平为0。 …

解锁人工智能新境界:大模型工程与架构的深度探索

在当今世界&#xff0c;人工智能(AI)无处不在&#xff0c;它已经悄然改变了我们的生活方式。从自动驾驶汽车到智能音箱&#xff0c;从智能医疗系统到虚拟助手&#xff0c;AI的影子无处不在。而在这一切背后&#xff0c;是一个个巨大的数学模型在默默运转。这些模型就像是我们人…

excel所有知识点

1要加双引号 工作表&#xff08;.xlsx) 单击右键→插入&#xff0c;删除&#xff0c;移动、重命名、复制、设置标签颜色&#xff0c;选定全部工作表 工作表的移动&#xff1a;两个表打开→右键→移动&#xff08;如果右键是灰色的&#xff0c;可能是保护工作表了&#xff09…

JAVA安全(偏基础)

SQL注入 SQLI(SQL Injection)&#xff0c; SQL注入是因为程序未能正确对用户的输入进行检查&#xff0c;将用户的输入以拼接的方式带入SQL语句&#xff0c;导致了SQL注入的产生。攻击者可通过SQL注入直接获取数据库信息&#xff0c;造成信息泄漏。 JDBC JDBC有两个方法获取s…

鸿蒙Harmony应用开发—ArkTS-全局UI方法(列表选择弹窗)

列表弹窗。 说明&#xff1a; 从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 本模块功能依赖UI的执行上下文&#xff0c;不可在UI上下文不明确的地方使用&#xff0c;参见UIContext说明。 从API version 10开始&#xff0…

hadoop学习笔记

hadoop概述 Apache Hadoop 为可靠的&#xff0c;可扩展的分布式计算开发开源软件。作为一个数据框架允许使用简单的编程模型跨计算机群集分布式处理大型数据集&#xff08;海量的数据&#xff09;。分别由一下三个模块组成&#xff1a; 1、Hadoop分布式文件系统&#xff08;HDF…

flink join的分类

带窗口的join 下图是固定窗口,同样的还有滑动窗口和会话窗口join DataStream<Integer> orangeStream = ...; DataStream<Integer> greenStream = .

报表生成器FastReport .Net用户指南:关于脚本(下)

FastReport的报表生成器&#xff08;无论VCL平台还是.NET平台&#xff09;&#xff0c;跨平台的多语言脚本引擎FastScript&#xff0c;桌面OLAP FastCube&#xff0c;如今都被世界各地的开发者所认可&#xff0c;这些名字被等价于“速度”、“可靠”和“品质”,在美国&#xff…

走进redisson

这里作者将大家走进redisson&#xff0c;读完这篇相信加深你对redisson的获取锁&#xff0c;重入&#xff0c;超时&#xff0c;看门狗&#xff0c;发布订阅等原理和功能的理解。 本文将深入原理代码&#xff0c;给出每行代码的意义以及最后的效果&#xff0c;过程有些枯燥&…

GitHub Copilot怎么取消付费?

0. 前言 GitHub Copilot非常好用&#xff0c;还没有使用过的同学可以参考教程白嫖一个月&#xff1a;【保姆级】VsCode 安装GitHub Copilot实操教程 GitHub Copilot每月10美元的费用对于一些用户来说可能是一笔不小的开销。如果你已经完成了GitHub Copilot的免费试用&#xf…

在conda下的sklearn库安装

比较坑的是它这个库在conda下不叫这个名字&#xff0c;所以直接conda install sklearn是不行的&#xff0c;输入下面的指令就能直接安装啦。 conda install scikit-learn

【数据结构】猛猛干7道链表OJ

前言知识点 链表的调试技巧 int main() {struct ListNode* n1(struct ListNode*)malloc(sizeof(struct ListNode));assert(n1);struct ListNode* n2(struct ListNode*)malloc(sizeof(struct ListNode));assert(n2);struct ListNode* n3(struct ListNode*)malloc(sizeof(struc…

docker方式进行pytorch多机多卡分布式训练

docker ip共享与gpu指定 1)ip共享 docker网络有多种,这里选择host直接用宿主机的ip 2)指定gpu docker方式进行pytorch多机多卡分布式训练 nvidia docker 容器介绍链接:https://docs.nvidia.com/deeplearning/frameworks/pytorch-release-notes/ docker用的nvidia官方镜像…

练习11 Web [极客大挑战 2019]Http

页面没有上传文件的地方&#xff0c;尝试查看前端源码中有没有任何内容&#xff0c;以及Fuzz手段查找php文件进行重放改包 本题要点&#xff1a; 伪造请求域名&#xff08;Referer&#xff09;&#xff0c;伪造浏览器标识&#xff08;User-Agent&#xff09;&#xff0c;伪造IP…

QT(6.5) cmake构建C++编程,调用python

一、注意事项 explicit c中&#xff0c;一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数)&#xff0c;承担了两个角色&#xff0c;构造器、类型转换操作符&#xff0c; c提供关键字explicit&#xff0c;阻止转换构造函数进行的隐式转换的发生&#…