如何使用Python对Excel、CSV文件完成数据清洗与预处理?

在数据分析和机器学习项目中,数据清洗与预处理是不可或缺的重要环节。

现实世界中的数据往往是不完整、不一致且含有噪声的,这些问题会严重影响数据分析的质量和机器学习模型的性能。

Python作为一门强大的编程语言,提供了多种库和工具来帮助我们高效地完成数据清洗与预处理任务,其中最常用的库包括Pandas、NumPy、SciPy等。

本文将详细介绍如何使用Python对Excel和CSV格式的数据文件进行清洗和预处理。

数据清洗与预处理概述

数据清洗与预处理主要包括以下几个步骤:

‌数据清洗‌:删除或修正数据集中的无效数据、重复数据、异常值等。
‌数据集成‌:将来自不同数据源的数据合并成一个统一的数据集。
‌数据变换‌:对数据进行规范化处理,如数据类型转换、标准化、归一化等。
‌数据规约‌:通过数据聚合、降维等技术减少数据量,提高处理效率。

读取CSV文件

Python的Pandas库提供了read_csv函数来读取CSV文件。

这个函数非常灵活,可以处理各种格式的CSV文件,并允许用户指定分隔符、列名、索引列等参数。


import pandas as pd# 读取CSV文件
df = pd.read_csv('data.csv', sep=',', header=0)# 查看数据前几行
print(df.head())
读取Excel文件

Pandas的read_excel函数可以用来读取Excel文件。这个函数同样支持多种参数,如指定工作表名称、列名等。

# 读取Excel文件
df_excel = pd.read_excel('data.xlsx', sheet_name='Sheet1', header=0)# 查看数据前几行
print(df_excel.head())

缺失值是数据清洗中常见的问题。Pandas提供了多种方法来处理缺失值,包括删除含缺失值的行或列、填充缺失值等。

删除含缺失值的行或列
# 删除含缺失值的行
df_cleaned = df.dropna()# 删除含缺失值的列
df_cleaned_cols = df.dropna(axis=1)
填充缺失值

填充缺失值有多种方法,如使用均值、中位数、众数填充,或者使用固定值填充。


# 使用均值填充数值型列
df_filled_mean = df.fillna(df.mean())# 使用固定值填充
df_filled_value = df.fillna(value=0)# 使用向前填充或向后填充
df_filled_ffill = df.fillna(method='ffill')
df_filled_bfill = df.fillna(method='bfill')

对于更复杂的填充策略,可以使用sklearn.impute模块中的SimpleImputer类。


from sklearn.impute import SimpleImputer# 实例化SimpleImputer,使用均值填充
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
df_filled_sk = pd.DataFrame(imputer.fit_transform(df), columns=df.columns)
重复值处理

Pandas提供了drop_duplicates函数来删除重复的行。

# 删除重复行,保留第一次出现的行
df_unique = df.drop_duplicates(keep='first')# 删除重复行,保留最后一次出现的行
df_unique_last = df.drop_duplicates(keep='last')

异常值可能会严重影响数据分析的结果。常用的异常值检测方法包括箱线图法和Z分数法。

箱线图法

Q1 = df.quantile(0.25)
Q3 = df.quantile(0.75)
IQR = Q3 - Q1df_outlier_removed = df[~((df < (Q1 - 1.5 * IQR)) | (df > (Q3 + 1.5 * IQR))).any(axis=1)]
Z分数法

from scipy import statsz_scores = stats.zscore(df)
df_zscore = df[(np.abs(z_scores) < 3).all(axis=1)]
数据类型转换

Pandas允许将列的数据类型从一种转换为另一种,这对于数据清洗和后续分析非常重要。

# 将字符串类型的日期转换为日期类型
df['date'] = pd.to_datetime(df['date'])# 将字符串类型的数值转换为整型或浮点型
df['number'] = df['number'].astype(int)
df['float_number'] = df['float_number'].astype(float)
字符串处理

在清洗数据时,经常需要对字符串进行处理,如去除空格、大小写转换、分割字符串等。

# 去除字符串两边空格
df['column'] = df['column'].str.strip()# 大小写转换
df['column_lower'] = df['column'].str.lower()
df['column_upper'] = df['column'].str.upper()# 字符串分割
df[['first_word', 'second_word']] = df['sentence'].str.split(' ', expand=True)
正则表达式

正则表达式是数据清洗中非常强大的工具,可以用来查找和替换字符串中的特定模式。


import re# 使用正则表达式替换字符串
df['column'] = df['column'].apply(lambda x: re.sub(r'\d+', '', x))  # 移除所有数字
数据标准化与归一化

数据标准化和归一化是数据预处理中常用的技术,可以使不同量纲的数据具有相同的尺度,便于后续分析。


from sklearn.preprocessing import StandardScaler, MinMaxScaler# 标准化
scaler = StandardScaler()
df_scaled = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)# 归一化
scaler = MinMaxScaler()
df_normalized = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)
特征构造

特征构造是通过创建新特征或对现有特征进行转换来提高模型性能的过程。


# 创建新特征:日期特征分解
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df['day'] = df['date'].dt.day# 特征组合
df['total_amount'] = df['quantity'] * df['price']
数据规约

数据规约通过数据聚合、降维等技术减少数据量,提高处理效率。Pandas提供了多种数据聚合方法,如groupby和pivot_table。


# 数据聚合
grouped = df.groupby('category').agg({'sales': 'sum', 'profit': 'mean'})# 数据透视表
pivot_table = pd.pivot_table(df, values='sales', index='date', columns='category', aggfunc='sum')
数据可视化

数据可视化是理解和分析数据的重要手段。Python的Matplotlib和Seaborn库提供了丰富的绘图功能。


import matplotlib.pyplot as plt
import seaborn as sns# 绘制直方图
df['column'].hist()
plt.show()# 绘制箱线图
sns.boxplot(x='category', y='sales', data=df)
plt.show()# 绘制散点图
plt.scatter(df['column1'], df['column2'])
plt.show()
结论

数据清洗与预处理是数据分析和机器学习项目中不可或缺的一环。Python提供了丰富的库和工具,如Pandas、NumPy、SciPy等,可以帮助我们高效地完成这一任务。

通过本文的介绍,我们了解了如何使用Python对Excel和CSV文件进行数据清洗、缺失值处理、重复值处理、异常值处理、数据类型转换、字符串处理、正则表达式应用、数据变换、特征构造、数据规约以及数据可视化等步骤。

希望这些内容能帮助读者在实际项目中更好地进行数据清洗与预处理工作。

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

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

相关文章

SpringCloud学习:Seata总结与回顾

SpringCloud学习&#xff1a;Seata总结与回顾 文章目录 SpringCloud学习&#xff1a;Seata总结与回顾1. Seata实战&#xff1a;测试2. Seate原理总结和面试题3. Seata总结与回顾4. 易混点 1. Seata实战&#xff1a;测试 测试问题 未启用分布式事务 若不使用分布式事务&#xf…

sql server删除过期备份文件脚本

一、通过脚本查看过期文件&#xff0c;时间可以自己设定 for /f "delims" %i in (dir /b /a-d "E:\mybak_file\*.bak" ^| findstr /i "backup" ^| findstr /v /i "no_backup") do if "%~ti" LSS "2024/09/29 16:50&qu…

算法-尺取法

尺取法&#xff08;Sliding Window Technique&#xff09;&#xff0c;也称为滑动窗口算法&#xff0c;是一种常用于解决数组或字符串子区间问题的有效方法。其核心思想是通过维护一个窗口&#xff08;子区间&#xff09;&#xff0c;在数组或字符串上滑动这个窗口&#xff0c;…

Greenhills学习总结

学习背景&#xff1a;近期参与xx项目过程中&#xff0c;遇到较多的关于代码集成编译的知识盲区&#xff0c;因此需要进行相关知识的学习和扫盲。 参考资料&#xff1a;GreenHills2017.7编译手册:本手册是GreenHills 2017.7.14版编译器的软件使用手册。该手册详细介绍了GreenHi…

Docker consul注册中心

一、consul 1.1、什么是服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。 起初服务都是单节点的&#xff0c;不保障高可用性&#xff0c;也不考虑服务的压力承载&#xff0c;服务之间调用单纯的通过接口访问。 直到后来出现了多个节点的分布式架构&#x…

React(五) 受控组件和非受控组件; 获取表单元素的值。高阶组件(重点),Portals; Fragment组件;严格模式StrictMode

文章目录 一、受控组件1. 什么是受控组件2. 收集input框内容3. 收集checkBox的值4. 下拉框select总结 二、非受控组件三、高阶组件1. 高阶组件的概念 (回顾高阶函数)2. 高阶组件应用&#xff1a;注入props(1) 高阶组件给---函数式组件注入props(2) 高阶组件给---类组件注入prop…

前100+大型语言模型(LLMs)面试问题和路线图

介绍 获取前 100 个精选的 LLM 面试问题&#xff0c;了解如何准备生成式 AI 或 LLM 面试准备和大型语言模型 &#xff08;LLM&#xff09; 面试准备的学习路径。 This article explains learning path for large language models (LLMs) interview preparation. You will fin…

陪诊小程序之uniapp(从入门到精通)

1.uniapp如何使用vue3编写页面 <template><view class"content"><navbar name"navbar组件"></navbar><image class"logo" src"/static/logo.png"></image><view class"text-area"&…

K14837 时空穿越(through)

题目描述 杰克船长的“黑珍珠号”误入了一片海域&#xff0c;一翻风浪过后&#xff0c;他发现自己穿越到了一个未知且神奇的岛屿上&#xff0c;岛屿上空无一物&#xff0c;只有一块写着字的牌子&#xff0c;上面写着&#xff1a;欢迎来到这里&#xff0c;参加我们的时间旅行计…

【OD】【E卷】【真题】【100分】补种未成活胡杨(PythonJavajavaScriptC++C)

题目描述 近些年来&#xff0c;我国防沙治沙取得显著成果。某沙漠新种植N棵胡杨&#xff08;编号1-N&#xff09;&#xff0c;排成一排。 一个月后&#xff0c;有M棵胡杨未能成活。 现可补种胡杨K棵&#xff0c;请问如何补种&#xff08;只能补种&#xff0c;不能新种&#…

C++进阶:AVL树实现

目录 一.AVL的概念 二.AVL的实现 2.1AVL树的结构 2.2AVL树的插入 2.2.1AVL树插入一个值的大概过程 2.2.2平衡因子更新 2.2.3插入节点及更新平衡因子的实现 2.3旋转 2.3.1旋转的原则 2.3.2右单旋 2.3.3右单旋的代码实现 2.3.4左单旋 2.3.5左单旋的代码实现 2.3.6…

vue综合指南(二)

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Vuet篇专栏内容:vue综合指南(二) 目录 21、介绍虚拟DOM 22、vue生命周期的理解 23、vue父组件向子组件传递数据…

架构设计笔记-20-补充知识

知识产权 我国没有专门针对知识产权制定统一的法律(知识产权法)&#xff0c;而是在民法通则规定的原则下&#xff0c;根据知识产权的不同类型制定了不同的单项法律及法规&#xff0c;如著作权法、商标法、专利法、计算机软件保护条例等&#xff0c;这些法律、法规共同构成了我…

STM32_实验5_中断实验

通过外部中断来检测四个按键按下的状态&#xff1a; WK_UP 控制蜂鸣器响和停 KEY0 控制 LED_R 互斥点亮 KEY1 控制 LED_G 互斥点亮 KEY2 控制 LED_B 互斥点亮。 中断的基本概念&#xff1a; 中断请求&#xff08;IRQ&#xff09;&#xff1a; 当发生某个特定事件&#xff08;例…

【问题解决】——当出现0xc000007b和缺少mfc140.dll时,该怎么做才能让软件可以打开

目录 事情起因 问题处理 明确定义 填坑之路 最后我是怎么解决的&#xff08;不想看故事直接到这里&#xff09; 事情起因 最近想要重新安装西门子博途来做西门子的一些算法的时候&#xff0c;发现自己软件装的是V15.1的版本&#xff0c;而买的plc1200固件版本要求至少16以…

(AtCoder Beginner Contest 375)D - ABA

&#xff08;AtCoder Beginner Contest 375&#xff09;D - ABA 题目大意 给定一个只包含大写字母的字符串S&#xff0c;求解其长度为3的回文字序列个数 思路 首先暴力枚举区间计算答案 O ( ∣ S ∣ 2 ) O(|S|^2) O(∣S∣2) 一定是会超时的 我们考虑使用前缀和思想 我们对于…

两个yaml转成的 excel对比

语言本地化过程中 &#xff0c;yaml转成excel格式给翻译人员使用&#xff0c;翻译好之后再转换成yaml格式给游戏使用。但是在翻译人员编辑时是不可控的&#xff0c;有可能造成某种想不到的问题。因此&#xff0c;需要将翻译人员的excel转成yaml ,再将yaml转成excel和翻译人员的…

特征编码:假如是树模型,还需要特征编码吗?

如果使用树模型&#xff0c;不一定需要进行传统的特征编码&#xff0c;具体取决于特征的性质和数据的情况。 一、不需要编码的情况 对于纯数值型特征&#xff1a;树模型可以直接处理数值型特征&#xff0c;无需进行编码。例如&#xff0c;如果特征是年龄、收入等连续数值&…

智能工厂的设计软件 表征论的三向度空间(意向相关项)

本文要点 在 最高级别上的数学诠释学观点中表征论的三向度空间&#xff08; 三个意向相关relative项引用&#xff09; “表征模式张量 空间--一般量化词【词典词】&#xff1a; 产品生产线程thread中最后的 “封装”的生产任务--以主取式存在分类学 划分的 “Package”中唯…

文本数据可视化

文字是传递信息最常用的载体。在当前这个信息爆炸的时代,人们接收信息的速度已经小于信息产生的速度,尤其是文本信息。当大段大段的文字摆在面前,已经很少有耐心去认真把它读完,经常是先找文中的图片来看。这一方面说明人们对图形的接受程度比枯燥的文字要高很多,另一方面…