2024年50个pandas高频操作汇总_50个pandas 高频使用,面试流程4轮技术面+1轮HR

最后

🍅 硬核资料:关注即可领取PPT模板、简历模板、行业经典书籍PDF。
🍅 技术互助:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。
🍅 面试题库:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。
🍅 知识体系:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

默认显示5行,可指定显示的行数。

df.head(n)  # 可指定整数,输出前面n行
df.tail(n)  # 可指定整数,输出后面n行

显示索引、列信息

显示索引及列的基本信息。

df.columns  # 列信息
df.index  # 索引信息

显示每列的数据类型

显示列的名称及对应的数据类型。

df.dtypes

显示占用的内存大小

显示给列占用内存的大小,单位是 :字节(byte)。

df.memory_usage()


定位某行数据

重点:无论是 loc 还是 iloc 使用的要领都是先指定行,再指定列,并且行与列表达式用 分隔。如:df.loc[:, :] 获取所有行所有列的数据。

使用 loc() 定位

比如现在要定位 [索隆] 这行数据,有以下

df.loc[1, :]  # loc[index , columns] 行索引,列名,返回 Series 对象
df.loc[df['age'] > 18]  # 返回 DataFrame 对象
# 或者 df[df['age'] > 18]
# df.loc[df['name'] == '索隆']

使用 iloc 定位

使用 iloc 取第二行(索引从0开始),所有列的数据。

df.iloc[1, :]  # iloc[index1, index2] 行索引, 列索引


添加一行数据

使用 loc 定位并添加

使用 loc 定位到 index = 3 的行,再进行赋值**(在原数据上进行修改)**

df.loc[len(df)] = ['乔巴', 3]

使用 append 添加

append 添加数据时需要指定列名,列值,如果某列未指定的话,则默认填充 NaN

df.append({'name': '山治', 'age': 19}, ignore_index=True)

删除数据

根据列名删除列

使用 drop 来删除某列,指定要删除的轴,与对应 列/行名称/索引

df.drop('name', axis = 1)  # 删除单列
df.drop(['name', 'age'], axis = 1)  # 删除多列

根据索引删除行

与上面删除列的方式相似,不过这里指定的是索引。

df.drop(0, axis=0)  # 删除单行
df.drop([0, 1], axis=0)  # 删除多行

使用 loc 定位数据并删除

先使用 loc 定位某条件的数据,再获取索引 index ,然后使用 drop 删除。

df.drop(df.loc[df['name'] == '娜美'].index, axis=0)  # 删除定位到的行

使用 del 删除列

del在原数据上进行修改,使用是要注意。

del df['age']

同时删除行、列

drop 也可以同时指定行列进行删除,这里删除第一、二行并删除 age 列。

df.drop(columns=['age'], index=[0, 1])

删除重复值
  • 指定 subset ,则根据指定的列作为参考进行去重,即如果某两行 a 值相同,则会删除第二次的出现的那一行,只保留第一次
  • 不指定 subset ,则根据所有列作为参考进行去重,只有两行数据 完全相同 才会进行去重。
df.drop_duplicates(subset=['a'], keep='first')
df.drop_duplicates(keep='first')


筛查重复值

示例数据

df = pd.DataFrame({'name':['Python',
                        'Python',
                        'Java',
                        'Java',
                        'C'],
                   'count': [2, 2, 6, 8, 10]})

在这里插入图片描述

判断某列是否有重复值

使用 values_counts() 对列中各值出现次数进行统计。结果默认按照降序进行排列,只需要判断第一行值的出现次数是否为1即可判断是否存在重复值。

df['a'].value_counts()

在这里插入图片描述

使用 drop_duplicates() 对重复值进行删除,只保留第一次出现的值,判断处理后的值是否与原 df 相等,如果 False 就表示有重复值。

df.equals(df.drop_duplicates(subset=['a'], keep='first'))

False

判断 DataFrame 是否有重复行

同样是使用 drop_duplicates() 对重复值进行删除,只保留第一次出现的值,此时不使用 subset 参数设置列,默认为全部列,判断处理后的值是否与原 df 相等,如果 False 就表示有重复值。

df.equals(df.drop_duplicates(keep='first'))

False

统计重复行的数量

注意这里的统计是参照所有列来的,只有两行完全相同才会判断为重复行,所以统计的结果是 1 。

len(df) - len(df.drop_duplicates(keep="first"))

1

显示重复的数据行

先删除重复的行,只保留第一次出现的,得到一个 行唯一 的数据集,再使用 drop_duplicates() 删除掉 df 中存在重复的所有数据,这次不保留第一次出现的重复值,将上述两个结果集进行合并,使用 drop_duplicates() 对新生成的数据集进行去重,即可得到重复行的数据。

df.drop_duplicates(keep="first")\
  .append(df.drop_duplicates(keep=False))\
  .drop_duplicates(keep=False)

在这里插入图片描述

缺失值处理

查找缺失值

缺失值为 True ,非缺失值为 False

df.isnull()

查找非缺失值

非缺失值为 True ,缺失值为 False

df.notnull()

显示有缺失值的行

.isnull:查找缺失值,主要为了将缺失值的位置标 True
.T:行列转置,为下一步 any 做准备。
.any:一个序列中满足一个 True,则返回 True

df[df.isnull().T.any()]

在这里插入图片描述

删除缺失值

这里的参数需要注意的比较多,这里着重讲一下。

  • axis:0 行,1 列
  • how
    • any:如果有 NaN,删除该行或列。
    • all:如果所有值都是 NaN,删除该行或列。
  • thresh:指定 NaN 的数量,当 NaN 数量达到才删除。
  • subset:要考虑的数据范围,如:删除缺失行,就用subset指定参考的列,默认是所有列。
  • inplace:是否修改原数据。
# 某行如果有缺失值,则删除这一行
df.dropna(axis=0, how='any')  
# 某列如果有缺失值,则删除这一列
df.dropna(axis=1, how='any')  

填充缺失值
数字或字符串填充

直接指定要填充的数字或字符串。

df.fillna(0)

用缺失值 前/后 的值填充
  • 用缺失值的前一个值(该列上面一个值)填充,如果缺失值在第一行则不填充
  • 用缺失值的后一个值(该列下面一个值)填充,如果缺失值在最后一行则不填充
df.fillna(method='pad')
df.fillna(method='bfill')

用缺失值所在列的 均值/中位数 等填充

可以用该列的统计信息来进行填充。如使用 meanmedianmaxminsum 填充等。

df.fillna(df.mean())


列操作

修改列名

df.columns 是直接指定新的列名来替换所有的列名。 (在原数据上进行修改)
rename() 需要指定原名与新名来进行替换。

df.columns = ['new\_name', 'new\_age']
df.rename(columns=({'name':'new\_name','age':'new\_age'}))

修改列类型

使用 astype 来修改列类型。

df['age'].astype(str)

将列进行拆分得到多列

split 只能对字符串列进行拆分。

df[['name1', 'name2']] = df['name'].str.split(',', expand=True)

将多列合并成新列

同样合并也是字符串类型的列才能进行合并。

df['all'] = df['name'] + '/' + df['age'].astype(str)

对数值列分区

对于数值列,实际使用的时候可能需要根据指定的范围,将这些数值变为标签值,如衡量产品的指标及格、不及格,成绩是否优秀等。使用是需要指定数值列、各个标签的临界值,临界值的开闭情况(示例中:默认 left=True ,指定 right=False ,即左闭右开),最后指定标签的名称即可。

df['评价'] = pd.cut(df['成绩'], [0, 60, 80, np.inf],
			 right=False, labels=['不及格', '良好', '优秀'])


排序

索引排序

对行索引降序排序

df.sort_index(axis=0, ascending=False)

对列索引降序排序

df.sort_index(axis=1, ascending=False)

重置索引

将索引重新排序,原来的索引不保留。

df.reset_index(drop=True)

值排序

先按照名字降序排序,再对相同名字下的成绩进行降序排序。

df.sort_values(by=['名字', '成绩'], axis=0, ascending=False)

创建排名列

使用 rank 来进行排名,主要参数 method 的取值含义如下:

method含义
average默认值,在名次一样的分组中,为各个值分配平均排名(平均数),排名之间存在跳跃
min使用分组中的最小排名,排名之间存在跳跃
max使用分组中的最大排名,排名之间存在跳跃
first按值在原始数据中的出现顺序进行排名,排名之间存在跳跃
dense同一个分组的排名相同,排名之间不存在跳跃

现在按照 成绩 列对每行数据进行排名,并新建排名列,几种排名方式下面都已给出。

df['排名'] = df['成绩'].rank(method='average', ascending=False)


分组

对行分组统计

现在对各人的成绩进行分组计算,分别计算总和、均值、最大值。

df.groupby(['名字']).sum()
df.groupby(['名字']).mean()
df.groupby(['名字']).max()

在这里插入图片描述
注意:此时的索引为 名字,如果想要重置索引,可以使用如下方式。

df.groupby(['名字']).sum().reset_index()

在这里插入图片描述

对不同列使用不同的统计函数

agg() 是指定函数使用在某个数列上,然后返回标量值。
apply() 是先将数据拆分 >>> 再应用 >>> 最后汇总的过程(只能应用单个函数)。返回多维的数据。

df.groupby(['名字']).agg({'成绩':['sum','mean','max']})
df.groupby(['名字']).apply(max)

在这里插入图片描述


DataFrame合并

pandas中的合并函数主要是:merge()concat()append(),一般用来连接两个及以上 DataFrame 。其中,concat(), append() 用来纵向连接 DataFrame 对象, merge() 用来横向连接 DataFrame 对象。

三者对比:

concat()

  • 连接多个DataFrame
  • 设置特定的键(key)

append()

  • 连接多个DataFrame

merge()

  • 指定列来连接DataFrame
merge()

on 若指定则该列必须同时出现在这两个 DataFrame 中,默认值为两个 DataFrame 列中的交集,在本例中即使不指定 on ,实际默认值也会按照 name 列来进行合并。
how 参数详解:

  • inner:根据 on 指定的列取交集。
  • outer:根据 on 指定的列取并集。
  • left:根据 on 指定的列并以左连接的方式合并。
  • right:根据 on 指定的列并以右连接的方式合并。
pd.merge(df1, df2, on='name', how = "inner")
pd.merge(df1, df2, on='name', how = "outer")
pd.merge(df1, df2, on='name', how = "left")
pd.merge(df1, df2, on='name', how = "right")

在这里插入图片描述

做了那么多年开发,自学了很多门编程语言,我很明白学习资源对于学一门新语言的重要性,这些年也收藏了不少的Python干货,对我来说这些东西确实已经用不到了,但对于准备自学Python的人来说,或许它就是一个宝藏,可以给你省去很多的时间和精力。

别在网上瞎学了,我最近也做了一些资源的更新,只要你是我的粉丝,这期福利你都可拿走。

我先来介绍一下这些东西怎么用,文末抱走。


(1)Python所有方向的学习路线(新版)

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

最近我才对这些路线做了一下新的更新,知识体系更全面了。

在这里插入图片描述

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

在这里插入图片描述

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

(4)200多本电子书

这些年我也收藏了很多电子书,大概200多本,有时候带实体书不方便的话,我就会去打开电子书看看,书籍可不一定比视频教程差,尤其是权威的技术书籍。

基本上主流的和经典的都有,这里我就不放图了,版权问题,个人看看是没有问题的。

(5)Python知识点汇总

知识点汇总有点像学习路线,但与学习路线不同的点就在于,知识点汇总更为细致,里面包含了对具体知识点的简单说明,而我们的学习路线则更为抽象和简单,只是为了方便大家只是某个领域你应该学习哪些技术栈。

在这里插入图片描述

(6)其他资料

还有其他的一些东西,比如说我自己出的Python入门图文类教程,没有电脑的时候用手机也可以学习知识,学会了理论之后再去敲代码实践验证,还有Python中文版的库资料、MySQL和HTML标签大全等等,这些都是可以送给粉丝们的东西。

在这里插入图片描述

这些都不是什么非常值钱的东西,但对于没有资源或者资源不是很好的学习者来说确实很不错,你要是用得到的话都可以直接抱走,关注过我的人都知道,这些都是可以拿到的。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 15
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值