数据清洗之Pandas的学习
Pandas数据清洗
什么是Pandas:
-
pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。
-
数据清洗中不是每一步都是必须的,按实际需求操作,自己要处理什么自己操作。
1、读取数据
import pandas as pd
df = pd.read_excel("./xlsx/某地区学校排名数据.xlsx")
2、查看数据信息
pd.set_option("display.max_columns", None) # 查看所有的列
pd.set_option("display.max_rows", None) # 查看所有的行
pd.set_option('display.expand_frame_repr', False) # 设置不折叠数据
print(df.head(5)) # 打印数据前5条,括号5可以省略,默认就是5
print(df.tail(5)) # 打印数据后5条,括号5可以省略,默认就是5
print(df.dtypes) # 查看各列的数据类型
print(df.info()) # 查看数据的整体信息
print(df.describe()) # 查看数据描述
print(df.columns) # 查看各列的列名
print(df.values) # 查看数据值
print(df["学校"].unique()) # 查看学校数量这一列的唯一值
print(df.sample(10)) # 随机打印10行数据
print(df.shape) # 打印一共有多少行多少列
3、数据清洗
# df.rename(columns={"要修改的列名": "修改的名字"}, inplace=True)
# inplace=True:对原数据修改,不需要返回值
df.rename(columns={"购药时间": "买药时间", "商品编码": "商品号码"}, inplace=True)
# 更改数据类型
df['学校'] = df['学校'].astype(str)
# 也可以多列修改
df[["学校", "院系"]] = df[["学校", "院系"]].astype(str)
# 填充处理: 空值填充为未知
df.fillna("未知", inplace=True)
# 以下两种都可以实现去空格\n处理
df['学校'] = df['学校'].map(str.strip) # 空格处理
df['学校'] = df['学校'].str.strip()
# 替换函数replace('要替换的值', '替换后的值')
df['学校'] = df['学校名称'].str.replace('VC', 'MV')
# 列拆分,和删除
df1[['城市', '城区', '地址']] = df1['地区'].str.split('·', 3, expand=True)
# 删除部分列这里我们删除地区列和详情页列:
df1.drop(["地区", "详情页"], axis=1, inplace=True)
# 列重命名
df1.rename(columns={"标题": "岗位", "公司名": "公司名称"}, inplace=True)
#修改为时间类型
df1["销售时间"]=pd.to_datetime(df1["销售时间"],errors="coerce")
3.1 重复数据的处理
# 查看是否有重复值
print(df.duplicated())
# 判断数据中是否存在重复值有就是True,没有就是False
print(df.duplicated().any())
# 查看重复值的总数量
print(df.duplicated().sum())
# 删除重复值 inplace=True 在原数据进行修改
df.drop_duplicates(inplace=True)
3.2 删除数据的处理
# drop 函数
# 删除学校名称字段
df.drop(labels='学校名称', axis=1, inplace=True)
# 删除学校名称变量中对应的缺失值 axis=0可以不写axis默认就是0
df = df.drop(labels=df['学校名称'].isnull().index, axis=0)
# 删除某一列下面两张方法都可以
df.drop("学校名称", axis=1, inplace=True)
del df['学校名称']
# dropna 函数
# 直接删除含有缺失值的行
df.dropna(inplace=True)
# 直接删除含有缺失值的列
df.dropna(axis=1, inplace=True)
# 只删除全是缺失值的行
df.dropna(how='all', inplace=True)
4、排序
df = df.sort_values(by=['排名'], ascending=False) # 降序ascending=False ,升序ascending=True
5、loc函数
# 小案例:
# 统计前50名中排名下降的学校
print(df.loc[(df["排名"] < 50) & (df["升/降"] < 0)]["学校名称"])
6、groupby案例
小案例1
# 统计各省市大学数量
citys = df.groupby("省市")["学校名称"].agg("count")
MeanNum = df.groupby("省市")["总分"].agg("mean")
# 把数据拼接起来
data = pd.concat([citys, MeanNum], axis=1)
# 转为list类型的列表,后续做数据可视化
schoolSum = data["学校名称"].tolist()
score = data["总分"].round(2).tolist()
小案例2
# 根据 价格(万元) 这一列进行降序排序
df.sort_values(by="价格(万元)", ascending=False, inplace=True)
# apply设置价格(万元)为无小数点,并且只要15条数据,转list类型的列表
top_price = df["价格(万元)"].apply("{0:.0f}".format).head(15).tolist()
xiaoqu = df["小区"].head(15).tolist()
小案例3
# 查找出post这一列只包含大数据的岗位
dt = df[df["post"].str.contains("大数据")]
#使用groupby进行分组,post统计数量,max_wages统计平均值,min_wages也统计平均值
mean_t = dt.groupby("city").agg({"post": "count", "max_wages": "mean", "min_wages": "mean"})
# mean_t新增一列叫sum他的列值是(mean_t["max_wages"] + mean_t["min_wages"]) / 2得到的平均值
mean_t["sum"] = (mean_t["max_wages"] + mean_t["min_wages"]) / 2
7、保存文件
data.to_csv("./school.csv") #保存为csv文件
data.to_excel("./school.csv") #保存为excel文件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通