当前位置: 首页 > news >正文

DataFrame—数据汇总6

文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的动态,一起学习,共同进步。

 一.缺失值处理

#示例数据
df = pd.read_csv("pokemon_data.csv",encoding="gbk")
#查看数据前十行
df.head(10)

1.判断缺失值

判断数据表所有数据中的缺失值

df.isnull()

判断数据表某一列的缺失值

df["类型2"].isnull()
#查看类型2这一列的非缺失值和缺失值的数量分布
df["类型2"].isnull().value_counts()

2.删除缺失值

删除掉含有缺失值的所有行

df.dropna()
df.dropna(how="any")

删除满足行内数据均为NaN这个条件的行

df.dropna(how="all")

 创建一个4行3列的含有NaN的数据作为演示

df1 = pd.DataFrame([[1,5,np.nan],[2,np.nan,np.nan],[2,3,np.nan],[np.nan,np.nan,np.nan]])
df1
012
01.05.0NaN
12.0NaNNaN
22.03.0NaN
3NaNNaNNaN

how="all"能删除掉均为NaN的行

df1.dropna(how="all")
012
01.05.0NaN
12.0NaNNaN
22.03.0NaN

删除满足列内数据均为NaN这个条件的列,按列删除

df1.dropna(how="all",axis=1,inplace=True)
df1

3.填充缺失值

填充指定值

df1.fillna(value=0)

填充函数

df1[1].fillna(df1[1].mean())

向前填充

df1[1].fillna(method="ffill")

向后填充

df1[1].fillna(method="bfill")

 二.清除空格

创建含有空格的示例数据

dict1 = {"name":["小红","小明","小张"],"age":[16,17,18],"city":["北京  ","杭州","  上海  "]}
df2 = pd.DataFrame(dict1,columns=["name","age","city"])

 查看含有空格的数据

df2.to_csv("2.csv")

清除空格

df2["city"] = df2["city"].map(str.strip)

查看清除后的数据表

df2.to_csv("df2.csv")

3.转换数据格式

将年龄列数据转换成字符串格式

df2["age"] = df2["age"].astype("str")
df2.dtypes

将年龄列数据转换成浮点数格式

df2["age"] = df2["age"].astype("float")

将年龄列数据转换成整数格式

df2["age"] = df2["age"].astype("int")

4.大小写转换

df2["city"] = ["beijing","hangzhou","shanghai"]
df2

转换成大写

df2["city"] = df2["city"].str.upper()
df2

转换成小写

df2["city"] = df2["city"].str.lower()
df2

转换成首字母大写

df2["city"] = df2["city"].str.title()
df2

5.更改列名

通过rename函数修改部分列名或者所有列名,并默认返回一个新的数据框,若需要在原基础上修改,添加参数inplace=True即可

df2.rename(columns={"name":"name2","age":"age2"})

通过columns属性修改列名,这种方式就需要输入所有的列名了,并直接在原基础上修改

df2.columns = ["n","a","c"]

6.更改索引与重置索引

df.head(10)

更改索引

#将类型1这列作为索引
df3 = df.set_index("类型1")
df3

重置索引

df4 = df3.reset_index()
df4

7.重复值处理

df5 = pd.DataFrame({"c1":["apple"]*3 + ["banana"]*3,"c2":[1,1,2,3,3,2]})
df5

查看是否有重复值

#适合小数据目测
df5.duplicated(subset=["c1","c2"],keep="first")
#当数据量比较大的时候,可以看看重复数据和非重复数据的计数分布
df5_duplicated = df5.duplicated(subset=["c1","c2"],keep="first")
df5_duplicated.value_counts()

保留重复值

df5[df5.duplicated(subset=["c1","c2"],keep="first")]

删除重复值

(1)默认保留第一个出现的重复值,删除掉后面的重复值

df5.drop_duplicates(subset=["c1","c2"],keep="first")

(2)保留最后一个重复值,删除掉前面的重复值

df5.drop_duplicates(subset=["c1","c2"],keep="last")

(3)如果希望直接在原基础上修改,添加参数inplace=True

df5.drop_duplicates(subset=["c1","c2"],keep="last",inplace=True)
df5

8.替换值

忽略警告的做法

import warnings
warnings.filterwarnings("ignore")
df6 = df.head(10)
df6
df6["类型1"] = df6["类型1"].replace("Grass","G")
df6

多个对象替换单个值

df6["类型1"] = df6["类型1"].replace(["G","Fire"],"gf")
df6

用不同的值替换不同的对象

df6["类型1"] = df6["类型1"].replace(["gf","Water"],["good","W"])
df6

参数也可以是字典

df6["类型1"] = df6["类型1"].replace({"good":"gg","W":"ww"})
df6
http://www.lryc.cn/news/353266.html

相关文章:

  • Java入门基础学习笔记41——实体类
  • 【Linux】信号之信号的保存和处理详解
  • 基于Django的图书管理系统
  • js实现元素根据鼠标滚轮滚动向左右上下滑动着从模糊到清楚显示出来
  • yocto学习
  • 【IC设计】牛客网-序列检测习题总结
  • python爬虫登录到海康相机管理页面
  • 9.Docker网络
  • Windows VS2022 C语言使用 sqlite3.dll 访问 SQLite数据库
  • java库和包的概念
  • mysql内存结构
  • Python | Leetcode Python题解之第111题二叉树的最小深度
  • c++二进制输出
  • 5. C++网络编程-UDP协议的实现
  • Altium Designer 中键拖动,滚轮缩放,并修改缩放速度
  • python从入门到精通04
  • tomcat三级指导
  • 不知道是该怎么引用多个函数片段?具体示例如代码
  • P3128 [USACO15DEC] Max Flow P题解(树上差分,最近公共祖先,图论)
  • 在Linux上面部署ELK
  • Langchain-Chatchat的markdownHeaderTextSplitter使用
  • 掩码生成蒸馏——知识蒸馏
  • 【C#实战】Newtonsoft.Json基类子类解析
  • 表达式求值的相关语法知识(C语言)
  • 开发中遇到Electron自定义窗口的问题
  • c# sqlite使用
  • 39、Flink 的窗口剔除器(Evictors)详解
  • Flutter 中的 DefaultTabController 小部件:全面指南
  • C++技能进阶指南——多态语法剖析
  • Linux内存管理--系列文章肆