python爬虫之pandas库——数据清洗

news2025/1/9 6:00:19

安装pandas库

pip install pandas

pandas库操作文件

已知在本地桌面有一名为Python开发岗位的csv文件(如果是excel文件可以做简单修改即可,道理是通用的)

打开文件:

打开文件并查看文件内容

from pandas import DataFrame
import pandas as pd
data_csv = pd.read_csv("D:\desk\Python开发岗位.csv",encoding = "ANSI")
data

运行结果如下:

encoding的作用是为了在文本处理或文件操作中使用的字符编码设置。

保存csv文件

data.to_csv("D:\desk\Python开发岗位1.csv",encoding = "ANSI")
#data是你所要保存的变量名,encoding为了防止乱码
#此方法会保存序列,如果不想保存序列则才有下列保存方式
data.to_csv("D:\desk\Python开发岗位1.csv",encoding = "ANSI",index=False)

缺失值处理:

1)dropna()删除数据中值为空的所在行
from pandas import DataFrame
import pandas as pd
data_csv = pd.read_csv("D:\desk\Python开发岗位.csv",encoding = "ANSI")
data = data_csv.dropna()
data

运行结果如下:

2)fillna()用其他值代替空值(我一般采用?代替)
from pandas import DataFrame
import pandas as pd
data_csv = pd.read_csv("D:\desk\Python开发岗位.csv",encoding = "ANSI")
data = data_csv.fillna('?')
data

运行结果如下:

3)用前一个数据代替fillna(method='pad')
from pandas import DataFrame
import pandas as pd
data_csv = pd.read_csv("D:\desk\Python开发岗位.csv",encoding = "ANSI")
data = data_csv.fillna(method='pad')
data

运行结果如下:(会出现的情况是当缺失值是第一位时,前方无数据可以用来填充)

4)用后一个数据代替fillna(method=bfill)
from pandas import DataFrame
import pandas as pd
data_csv = pd.read_csv("D:\desk\Python开发岗位.csv",encoding = "ANSI")
data = data_csv.fillna(method="bfill")
data

运行结果如下:(会出现的情况是当缺失值是最后一位时,后方无数据可以用来填充)

5)用平均值来代替空值fillna(mean())

(我自己觉得这种方法适用于例如成绩表,因为mean取平均值要是int类型的数据,所以下面就不进行演示)

from pandas import DataFrame
import pandas as pd
data_csv = pd.read_csv("D:\desk\Python开发岗位.csv",encoding = "ANSI")
data_csv.fillna(data_csv.mean())

重复值处理

做法是通过duplicated()查看是否有重复值,如果有则通过电容屏_duplicates()方法进行删除

数据处理

这里要做的是将薪资拆分成最低薪资和最高薪资,并用最低薪资进行排序

首先采用正则表达式将x-x千/月中的千/月利用替换成空值进行删除

import re

salary_str = "5千/月-10千/月"
parts = re.sub(r'千/月', '', salary_str).split('-')
parts

再用split函数进行切割

  • split 是字符串对象的一个方法,用于将字符串分割成一个列表。
  • '-' 是分割符,意味着 split 方法会在每个 - 字符处将字符串分割成多个部分。

而排序则使用sort_values(by='你想以哪一列为依据')注意:sort默认排序是从小到大升序

from pandas import DataFrame
import pandas as pd
import re
data_csv = pd.read_csv("D:\desk\Python开发岗位2.csv",encoding = "ANSI")
salary_column = '薪资'  # 根据您的CSV文件实际情况修改列名

# 使用正则表达式替换'千/月'为空字符串
# 假设薪资的格式是'数字-数字千/月'
def parse_salary(salary_str):
    # 移除'千/月'并分割字符串
    parts = re.sub(r'千/月', '', salary_str).split('-')
    if len(parts) == 2:
        # 将字符串转换为整数并乘以1000(因为'千'等于1000)
        min_salary = float (parts[0]) * 1000
        max_salary = float (parts[1]) * 1000
        return min_salary, max_salary
    else:
        # 如果格式不正确,返回NaN
        return None, None
data_csv[['最低薪资', '最高薪资']] = pd.DataFrame(data_csv[salary_column].apply(parse_salary).tolist(), index=data_csv.index)
data = data_csv
data1=data.sort_values(by='最低薪资')

日期处理

当一个文件中日期格式不统一可能存在2023/1/8、20231021、10072022等情况

date_column = '发布日期'

# 定义一个函数来解析不同格式的日期字符串
def parse_date(date_str):
    # 尝试不同的日期格式
    #将所有出现的可能都罗列出来
    formats = ['%Y%m%d','%d%m%Y','%Y/%m/%d','%m/%d/%Y']  
    for fmt in formats:
        try:
            return pd.to_datetime(date_str, format=fmt)
        except ValueError:
            # 如果当前格式解析失败,则继续尝试下一个格式
            continue
    # 如果所有格式都解析失败,则返回原始字符串或None
    return None  # 或者返回 date_str

# 应用parse_date函数到发布日期列
data_csv[date_column] = data_csv[date_column].apply(parse_date)

以上只列举了四种情况,可根据自己的实际情况进行增加或删减

对于Python本人也只是初学,欢迎各位学者一起讨论一起学习,如果文章中有错误之处还请指正!

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

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

相关文章

【PPT密码】PPT文件的两种不可编辑情况

不知道大家有没有遇到过,PPT文件无法编辑的情况,今天小编分享两种ppt文件不可编辑的原因以及解决方法。 情况一 如果打开ppt文件之后,发现幻灯片某些地方或者每张幻灯片同一个地方,无法编辑,这可能是因为PPT中设置了…

第八次javaweb作业

我们小组课程设计的题目是:超市管理系统,我认领的模块是:商品信息管理 controller package com.example.supermarker.controller;import com.example.supermarker.pojo.MerchInfo; import com.example.supermarker.pojo.PageBean; import c…

AcWing 2568:树链剖分 ← 线段树+DFS

【题目来源】https://www.acwing.com/problem/content/2570/【题目描述】 给定一棵树,树中包含 n 个节点(编号 1∼n),其中第 i 个节点的权值为 ai。 初始时,1 号节点为树的根节点。 现在要对该树进行 m 次操作&#xf…

yolov10 使用自己的数据集训练目标检测模型

1 环境配置(使用anaconda) conda create -n yolov10 python=3.9 //创建虚拟环境 conda activate yolov10 //激活虚拟环境 pip install -r requirements.txt //执行yolov10 路径下requirements.txt 安装依赖 pip install -e .2.数据集制作 使用lableImage制作数据集(win版…

C# WPF编程基础

XAML文件内容 <Window x:Class"Wpf_demo1.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expression/ble…

【Python】 列表中的删除操作:del、remove 和 pop 的区别

基本原理 在Python中&#xff0c;列表&#xff08;list&#xff09;是一种非常灵活的数据结构&#xff0c;它允许我们存储一系列的元素。在处理列表时&#xff0c;我们经常需要添加、修改或删除元素。在删除元素时&#xff0c;我们可以使用三种不同的方法&#xff1a;del、rem…

SEO之核心关键词(二)

初创企业或者需要建站的朋友看以下两篇文章&#xff0c;谢谢支持&#xff1a; 我给不会敲代码又想搭建网站的人建议新手上云 &#xff08;接上一篇。。。。&#xff09; 4、查询搜索次数 经过自己及朋友、同事的头脑风暴和检查竞争对手网站之后&#xff0c;再到Google 关键词…

跟进2年弄丢1.8亿,你的大客管理错在哪里?

数量并非目的之所在&#xff0c;质量才是根本之道。重视1%的超级用户&#xff0c;才是提高效率的关键所在。 ——凯文凯利 在当今的商业环境中&#xff0c;大客户已成为销售服务型企业最宝贵的资产。他们不仅贡献了企业收入的重要一环&#xff0c;…

韩顺平0基础学Java——第13天

p264-p284 安装IDEA&#xff0c;熟悉一下软件。 尴尬了&#xff0c;难道是这个版本的idea不支持jdk17&#xff0c;难受住了 成功了&#xff0c;顺便跑一下昨天的作业&#xff1a; 这都要跑2秒&#xff1f;是电脑的问题还是谁的问题&#xff1f;控制台里跑的好快的哦 设置id…

vue中在mounted使用$refs获取不到DOM元素

vue中在mounted使用$refs获取不到DOM元素 前言解决方案1、通过使用$nextTick来获取2、updated中获取 前言 在使用ref的时候&#xff0c;在mounted中通过$ref获取节点是获取不到报undefined this.$refs.xx 为 undefined 解决方案 在mounted钩子中加载回来的数据不会在这个阶段更…

淘宝扭蛋机小程序:探索未知,扭出惊喜

在数字时代&#xff0c;我们一直在寻找一种新颖、有趣且充满惊喜的购物方式。淘宝扭蛋机小程序正是为了满足这一需求而诞生的创新之作&#xff0c;它将传统扭蛋机的乐趣与淘宝的丰富商品库完美结合&#xff0c;为您带来前所未有的购物体验。 打破传统&#xff0c;创新玩法 淘…

仅1天录用!3天见刊!这本毕业“水刊”,全科都收,极速上线!

【欧亚科睿学术】 01 期刊简介 【期刊类别】计算机工程类EI 【期刊简介】最新EI期刊目录内源刊 【版面情况】仅10篇版面 【审稿周期】预计2-4周左右录用 【检索情况】EI&Scopus双检 【征稿领域】计算机工程领域相关稿件均可。 02 征稿领域 该期刊发表有关计算机在各…

面试二十六、c++语言级别的多线程编程

一、 多线程编程 ​​​​​ 这里的c语言级别的多线程和linux的有一定的区别&#xff0c;c语言级别提供的多线程比较严格&#xff0c;如果主线程结束了&#xff0c;但是子线程没有结束&#xff0c;进程就会异常终止&#xff0c;而linux不会&#xff0c;会继续执行。 二、模拟卖…

ComfyUI工作流网站

https://openart.ai/home https://comfyworkflows.com/ https://civitai.com/

《java数据结构》--栈的详解

一.栈的认识 栈是一种不同于链表和顺序表的储存数据结构&#xff0c;它对存储数据和取出数据有着特殊的要求&#x1f914;。 首先栈只能从一端存储数据&#xff0c;也就是从一端进&#xff0c;还从这一端出这也是栈最大的特点&#xff0c;这也导致在栈中存取数据都必须遵循先…

【Linux】常用基础命令 | 搭建云服务器优化环境 | 程序的部署

文章目录 Linux常用命令及搭建环境一、LinuxLinux发行版 1.常用命令1.ls2.cd3.pwd4.touch5.cat6.echo7.vim8.mkdir9.rm10.mv11.cp12.man13.grep14.ps15.netstat 2.搭建Java Web程序的运行环境包管理器1.安装JDK2.安装Tomcat3.安装mysql 3.程序的部署 Linux常用命令及搭建环境 …

springcloud-服务拆分与远程调用

一 微服务 1.1简单了解 SpringCloud SpringCloud是目前国内使用最广泛的微服务框架。官网地址&#xff1a;Spring Cloud。 SpringCloud集成了各种微服务功能组件&#xff0c;并基于SpringBoot实现了这些组件的自动装配&#xff0c;从而提供了良好的开箱即用体验&#xff1a…

温故而知新-Spring篇【面试复习】

温故而知新-Spring篇【面试复习】 前言版权推荐温故而知新-Spring篇IOCAOP循环依赖springboot如果要对属性文件中的账号密码加密如何实现&#xff1f;SpringBoot的优点Spring Boot 的核心注解是哪个&#xff1f;它主要由哪几个注解组成的&#xff1f; 最后 前言 2023-7-31 15:…

React18 apexcharts数据可视化之折线图

基础折线图 import ApexChart from react-apexcharts;export function Basic() {// 数据序列const series [{name: "Desktops",data: [10, 41, 35, 51, 49, 62, 69, 91, 148]},]// 图表选项const options {// 图表chart: {height: 650,type: line,zoom: {enabled:…

QT学习(20):QStyle类

Qt包含一组QStyle子类&#xff0c;这些子类&#xff08;QWindowsStyle&#xff0c;QMacStyle等&#xff09;模拟Qt支持的不同平台的样式&#xff0c;默认情况下&#xff0c;这些样式内置在Qt GUI模块中&#xff0c;样式也可以作为插件提供。 Qt的内置widgets使用QStyle来执行几…