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

相关推荐
d***95624 小时前
Libvio.link爬虫技术全解析
爬虫
人工智能训练4 小时前
【极速部署】Ubuntu24.04+CUDA13.0 玩转 VLLM 0.15.0:预编译 Wheel 包 GPU 版安装全攻略
运维·前端·人工智能·python·ai编程·cuda·vllm
yaoming1684 小时前
python性能优化方案研究
python·性能优化
码云数智-大飞5 小时前
使用 Python 高效提取 PDF 中的表格数据并导出为 TXT 或 Excel
python
biuyyyxxx7 小时前
Python自动化办公学习笔记(一) 工具安装&教程
笔记·python·学习·自动化
极客数模7 小时前
【2026美赛赛题初步翻译F题】2026_ICM_Problem_F
大数据·c语言·python·数学建模·matlab
小鸡吃米…8 小时前
机器学习中的代价函数
人工智能·python·机器学习
Li emily9 小时前
如何通过外汇API平台快速实现实时数据接入?
开发语言·python·api·fastapi·美股
m0_561359679 小时前
掌握Python魔法方法(Magic Methods)
jvm·数据库·python
Ulyanov9 小时前
顶层设计——单脉冲雷达仿真器的灵魂蓝图
python·算法·pyside·仿真系统·单脉冲