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

安装pandas库

pip install pandas

pandas库操作文件

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

打开文件:

打开文件并查看文件内容

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

运行结果如下:

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

保存csv文件

python 复制代码
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()删除数据中值为空的所在行
python 复制代码
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()用其他值代替空值(我一般采用?代替)
python 复制代码
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')
python 复制代码
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)
python 复制代码
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类型的数据,所以下面就不进行演示)

python 复制代码
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千/月中的千/月利用替换成空值进行删除

python 复制代码
import re

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

再用split函数进行切割

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

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

python 复制代码
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等情况

python 复制代码
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本人也只是初学,欢迎各位学者一起讨论一起学习,如果文章中有错误之处还请指正!

相关推荐
大模型铲屎官44 分钟前
【Python-Day 14】玩转Python字典(上篇):从零开始学习创建、访问与操作
开发语言·人工智能·pytorch·python·深度学习·大模型·字典
yunvwugua__1 小时前
Python训练营打卡 Day27
开发语言·python
Stara05112 小时前
基于多头自注意力机制(MHSA)增强的YOLOv11主干网络—面向高精度目标检测的结构创新与性能优化
人工智能·python·深度学习·神经网络·目标检测·计算机视觉·yolov11
那雨倾城3 小时前
使用 OpenCV 将图像中标记特定颜色区域
人工智能·python·opencv·计算机视觉·视觉检测
LuckyTHP5 小时前
java 使用zxing生成条形码(可自定义文字位置、边框样式)
java·开发语言·python
mahuifa7 小时前
(7)python开发经验
python·qt·pyside6·开发经验
学地理的小胖砸8 小时前
【Python 操作 MySQL 数据库】
数据库·python·mysql
安迪小宝8 小时前
6 任务路由与负载均衡
运维·python·celery
Blossom.1188 小时前
使用Python实现简单的人工智能聊天机器人
开发语言·人工智能·python·低代码·数据挖掘·机器人·云计算
火龙谷8 小时前
【爬虫】DrissionPage-4
爬虫