数据清洗之Pandas的学习

Pandas数据清洗

什么是Pandas:

  1. pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。

  2. 数据清洗中不是每一步都是必须的,按实际需求操作,自己要处理什么自己操作。

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文件
posted @   你的铁铁  阅读(136)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示