当前位置: 首页 > news >正文

如何使用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文件进行数据清洗、缺失值处理、重复值处理、异常值处理、数据类型转换、字符串处理、正则表达式应用、数据变换、特征构造、数据规约以及数据可视化等步骤。

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

相关文章:

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

在数据分析和机器学习项目中&#xff0c;数据清洗与预处理是不可或缺的重要环节。 现实世界中的数据往往是不完整、不一致且含有噪声的&#xff0c;这些问题会严重影响数据分析的质量和机器学习模型的性能。 Python作为一门强大的编程语言&#xff0c;提供了多种库和工具来帮…...

第8篇:网络安全基础

目录 引言 8.1 网络安全的基本概念 8.2 网络威胁与攻击类型 8.3 密码学的基本思想与加密算法 8.4 消息认证与数字签名 8.5 网络安全技术与协议 8.6 总结 第8篇&#xff1a;网络安全基础 引言 在现代信息社会中&#xff0c;计算机网络无处不在&#xff0c;从互联网到局…...

Flutter 中的 PopScope 小部件:全面指南

Flutter 中的 PopScope 小部件&#xff1a;全面指南 在 Flutter 应用开发中&#xff0c;导航和路由管理是构建复杂应用时必须面对的挑战之一。PopScope 小部件是 Flutter 2.0 版本引入的一个新功能&#xff0c;它提供了一种更灵活的方式来控制页面的弹出和返回行为。本文将带你…...

视频剪辑的未来

技术发展推动4&#xff1a; 人工智能与自动化辅助&#xff1a;人工智能在视频剪辑中的应用将不断深化。例如&#xff0c;智能剪辑软件能够自动分析视频素材的内容、情感和节奏&#xff0c;快速生成初步的剪辑版本&#xff0c;剪辑师在此基础上进行进一步的优化和调整&#xff0…...

通过PHP与API的结合,开启电商数据集成的新篇章

在数字化转型的浪潮中&#xff0c;电子商务数据的集成对于企业来说变得越来越重要。无论是在线零售商还是品牌商&#xff0c;都需要实时访问商品数据以优化库存管理、制定定价策略、提升客户体验。PHP&#xff0c;作为服务端脚本语言的佼佼者&#xff0c;为开发者提供了强大的工…...

使用 CDN 后 Apache 的日志记录客户真实 IP

经常搭建网站服务器的都知道&#xff0c;在给站点使用了 CDN 后 Web 应用的日志记录里就会只记录 CDN 节点 IP 了&#xff0c;这就没法看到真实客户请求 IP&#xff0c;对于日志分析、运维日常维护来说就有点儿麻烦了&#xff0c;今天明月结合在五洛云服务器上搭建的Apache环境…...

ORACLE 19C安装 RAC报错

1. 问题描述 在Oracle 19C RAC的安装过程中&#xff0c;使用克隆方式在两个节点上部署集群。当第一个节点配置好基础服务后&#xff0c;关机并克隆节点。当尝试在第二个节点上通过页面进行RAC安装时&#xff0c;出现以下错误&#xff1a; [INS-32070] Could not remove the n…...

省心英语 3.9.9| 资源最全面的英语学习App

省心英语是一款资源全面的英语学习软件&#xff0c;完全免费且无广告&#xff0c;内含丰富的词库和范文、中小学、四六级、考研、专四专八、雅思托福、新概念等所有阶段的学习内容。软件支持练听力、背单词、阅读理解等功能&#xff0c;覆盖了听说读写全方位学习。听力部分包含…...

ruoyi框架动态切换数据库

需求背景 最近需要一个小demo,项目中需要同时连接sqlserver和mysql数据库。 操作教程 1、pom.xml -- 修改common/pom.xml<!-- 动态数据源 --> <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-star…...

iba Data Export 导出面板选项

时间线选择真实时间“Absolute date / time” 时间间隔选择0.5Sec.&#xff08;最小为0.01Sec.&#xff09; 右侧数据根据需要选择...

过滤器Filter的介绍和使用

1.简介 在 Java Web 开发中&#xff0c;Filter 是一个非常重要的组件&#xff0c;用于在请求到达 Servlet 之前或响应返回客户端之前对请求和响应进行预处理或后处理。Filter 可以用来实现多种功能&#xff0c;如日志记录、权限检查、编码转换、请求头修改等。就好比机场的层层…...

JMeter之mqtt-jmeter 插件介绍

前言 mqtt-jmeter插件是JMeter中的一个第三方插件&#xff0c;用于支持MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;协议的性能测试。MQTT是一种轻量级的发布/订阅消息传输协议&#xff0c;广泛应用于物联网和传感器网络中。 一、安装插件 mqtt-jmeter项目…...

Nacos2.3.2在ubuntu中的部署

Nacos2.3.2 在ubuntu下的部署 下载地址 发布历史 | Nacos 官网 https://download.nacos.io/nacos-server/nacos-server-2.3.2.zip 修改 application.properties文件 开启鉴权 ### 开启鉴权功能 nacos.core.auth.caching.enabledtrue ### The auth system to use, current…...

Xilinx远程固件升级(一)——QuickBoot方案

Xilinx 7系FPGA远程更新方案——QuickBoot方式远程更新bit 一、远程更新背景和架构 对于非ZYNQ系列的常规FPGA来说&#xff0c;对于bit的更新一般使用JTAG进行烧录。而作为商用产品&#xff0c;想要进行OTA升级时&#xff0c;使用JTAG的升级方式显然不适合&#xff0c;因此&a…...

O(1)调度算法与CFS

目录 引言 linux内核的O&#xff08;1&#xff09;进程调度算法介绍 主要特点 工作原理 优点 缺点 运行队列 活动队列 过期队列 active指针和expired指针 O(1)调度器&#xff0c;两个队列的机制 两个队列的机制如下&#xff1a; 这个算法后期被CFS替代 CFS 工作原…...

SpringBoot——静态资源访问的四种方式

1.默认的静态资源目录 /static /public /resources /META-INF/resources 动态资源目录&#xff1a;/templates 2.resources静态资源目录图片存放 3. 静态资源访问 3.1.通过路径访问静态资源 http://localhost:8080/a.jpg http://localhost:8080/b.jpg …...

WPF中的Style如何使用

在 WPF 中&#xff0c;Style 是一个非常重要的概念&#xff0c;它用于定义控件的默认外观和行为。以下是如何使用 Style 的一些基本步骤和示例&#xff1a; 1. 定义 Style 资源 通常在 XAML 的资源部分&#xff08;ResourceDictionary&#xff09;中定义样式。 2. 指定 Targ…...

数据分析案例-欺诈性电子商务交易数据集可视化分析

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…...

java互联网医院智能导诊系统源码,Uniapp前端开发框架,支持一次编写,多端运行

智慧导诊系统源码&#xff0c;java源码&#xff0c;大屏机自动导诊&#xff0c;互联网医院智能导诊系统源码 老是全身无力&#xff0c;挂什么科&#xff1f; 经常头痛&#xff0c;挂什么科&#xff1f; 总是失眠&#xff0c;又得挂哪个科&#xff1f; 世界上最遥远的距离再加…...

公交线路查询web管理系统||公交线路查询|基于SprinBoot+vue公交线路查询系统(源码+数据库+文档)

公交线路查询web管理系统 目录 基于SprinBootvue公交线路查询系统 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&#xf…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...

使用SSE解决获取状态不一致问题

使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件&#xff0c;这个上传文件是整体功能的一部分&#xff0c;文件在上传的过程中…...

Spring AOP代理对象生成原理

代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】&#xff0c;这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...

字符串哈希+KMP

P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...