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

相关推荐
蜡笔小新星6 分钟前
Python Kivy库学习路线
开发语言·网络·经验分享·python·学习
篝火悟者21 分钟前
问题-python-运行报错-SyntaxError: Non-UTF-8 code starting with ‘\xd5‘ in file 汉字编码问题
开发语言·python
hakesashou40 分钟前
python如何比较字符串
linux·开发语言·python
安静的_显眼包O_o1 小时前
【数据分析】DataFrame.query()
数据挖掘·数据分析·pandas
_.Switch1 小时前
Python机器学习模型的部署与维护:版本管理、监控与更新策略
开发语言·人工智能·python·算法·机器学习
Hoper.J2 小时前
PyTorch 模型保存与加载的三种常用方式
人工智能·pytorch·python
弱冠少年2 小时前
websockets库使用(基于Python)
开发语言·python·numpy
技术无疆3 小时前
【Python】Streamlit:为数据科学与机器学习打造的简易应用框架
开发语言·人工智能·python·深度学习·神经网络·机器学习·数据挖掘
羊小猪~~3 小时前
机器学习/数据分析--用通俗语言讲解时间序列自回归(AR)模型,并用其预测天气,拟合度98%+
人工智能·python·机器学习·数据挖掘·数据分析·回归·时序数据库
qq_273900233 小时前
解析TMalign文本文件中的转换矩阵
python·生物信息学