首页 网站首页 商业资讯 技巧 查看内容

建议收藏!50个 Pandas 高频操作技巧!

私域流量运营 技巧 2023-2-22 15:18 10158人围观

接待关注 @Python与数据挖掘 ,专注 Python、数据分析、数据挖掘、好玩工具!

在数据分析和数据建模的进程中需要对数据停止清洗和整理等工作,偶然需要对数据增删字段。

下面为大师先容 Pandas 对数据的复杂查询、数据范例转换、数据排序、数据的点窜、数据迭代以及函数的利用方式,梳理不易,记得点赞、关注。文末可加入技术交换。

01、复杂查询

现实营业需求常常需要依照一定的条件甚至复杂的组合条件来查询数据,接下来为大师先容若何发挥Pandas数据挑选的无穷能够,为所欲为地取用数据。

1、逻辑运算

# Q1成就大于36
df.Q1> 36
# Q1成就不小于60分,而且是C组成员
~(df.Q1< 60) & (df['team'] == 'C')

2、逻辑挑选数据

切片( )、.loc 和.iloc 均支持上文所先容的逻辑表达式。

以下是切片( )的逻辑挑选示例:

df[df['Q1']== 8] # Q1即是8
df[~(df['Q1']== 8)] # 不即是8
df[df.name== 'Ben'] # 姓名为Ben
df[df.Q1> df.Q2]

以下是.loc 和.lic 示例:

# 表达式与切片分歧
df.loc[df['Q1']> 90, 'Q1':] # Q1大于90,只显现Q1
df.loc[(df.Q1> 80) & (df.Q2 < 15)] # and关系
df.loc[(df.Q1> 90) | (df.Q2 < 90)] # or关系
df.loc[df['Q1']== 8] # 即是8
df.loc[df.Q1== 8] # 即是8
df.loc[df['Q1']> 90, 'Q1':] # Q1大于90,显现Q1及厥后一切列

3、函数挑选

# 查询最大索引的值
df.Q1[lambdas: max(s.index)] # 值为21
# 计较最大值
max(df.Q1.index)
# 99
df.Q1[df.index==99]

4、比力函数

# 以下相当于 df[df.Q1 == 60]
df[df.Q1.eq(60)]
df.ne() # 不即是 !=
df.le() # 小于即是 <=
df.lt() # 小于 <
df.ge() # 大于即是 >=
df.gt() # 大于 >

5、查询df.query()

df.query('Q1 > Q2 > 90') # 间接写范例SQL where语句

还支持利用@符引入变量

# 支持传入变量,如大于均匀分40分的
a = df.Q1.mean()
df.query('Q1 > @a+40')
df.query('Q1 > `Q2`+@a')

df.eval()与df.query()类似,也可以用于表达式挑选。

# df.eval()用法与df.query类似
df[df.eval("Q1 > 90 > Q3 >10")]
df[df.eval("Q1 > `Q2`+@a")]

6、挑选df.filter()

df.filter(items=['Q1', 'Q2']) # 挑选两列
df.filter(regex='Q', axis=1) # 列名包括Q的列
df.filter(regex='e$', axis=1) # 以e结尾的列
df.filter(regex='1$', axis=0) # 正则,索引名以1结尾
df.filter(like='2', axis=0) # 索引中有2的
# 索引中以2开首、列名有Q的
df.filter(regex='^2',axis=0).filter(like='Q', axis=1)

7、按数据范例查询

df.select_dtypes(include=['float64']) # 挑选float64型数据
df.select_dtypes(include='bool')
df.select_dtypes(include=['number']) # 只取数字型
df.select_dtypes(exclude=['int']) # 解除int范例
df.select_dtypes(exclude=['datetime64'])

02、数据范例转换

在起头数据分析前,我们需要为数据分派好合适的范例,这样才可以高效地处置数据。分歧的数据范例适用于分歧的处置方式。

# 对一切字段指定同一范例
df = pd.DataFrame(data, dtype='float32')
# 对每个字段别离指定
df = pd.read_excel(data, dtype={'team':'string', 'Q1': 'int32'})

1、揣度范例

# 自动转换合适的数据范例
df.infer_objects() # 揣度后的DataFrame
df.infer_objects().dtypes

2、指定范例

# 按大致范例推定
m = ['1', 2, 3]
s = pd.to_numeric(s) # 转成数字
pd.to_datetime(m) # 转成时候
pd.to_timedelta(m) # 转成时候差
pd.to_datetime(m, errors='coerce') # 毛病处置
pd.to_numeric(m, errors='ignore')
pd.to_numeric(m errors='coerce').fillna(0) # 兜底添补
pd.to_datetime(df[['year', 'month', 'day']])
# 组分解日期

3、范例转换astype()

df.Q1.astype('int32').dtypes
# dtype('int32')
df.astype({'Q1': 'int32','Q2':'int32'}).dtypes

4、转为时候范例

t = pd.Series(['20200801', '20200802'])

03、数据排序

数据排序是指按一定的顺序将数据重新排列,帮助利用者发现数据的变化趋向,同时供给一定的营业线索,还具有对数据纠错、分类等感化。

1、索引排序df.sort_index()

s.sort_index() # 升序排列
df.sort_index() # df也是按索引停止排序
df.team.sort_index()s.sort_index(ascending=False)# 降序排列
s.sort_index(inplace=True) # 排序后生效,改变原数据
# 索引重新0-(n-1)排,很有用,可以获得它的排序号
s.sort_index(ignore_index=True)
s.sort_index(na_position='first') # 空值在前,另'last'暗示空值在后
s.sort_index(level=1) # 假如多层,排一级
s.sort_index(level=1, sort_remaining=False) #这层不排
# 行索引排序,表头排序
df.sort_index(axis=1) # 会把列按列名顺序排列

2、数值排序sort_values()

df.Q1.sort_values()
df.sort_values('Q4')
df.sort_values(by=['team', 'name'],ascending=[True, False])

其他方式:

s.sort_values(ascending=False) # 降序
s.sort_values(inplace=True) # 点窜生效
s.sort_values(na_position='first') # 空值在前
# df按指定字段排列
df.sort_values(by=['team'])
df.sort_values('Q1')
# 按多个字段,先排team,在同team内再看Q1
df.sort_values(by=['team', 'Q1'])
# 全降序
df.sort_values(by=['team', 'Q1'], ascending=False)
# 对应指定team升Q1降
df.sort_values(by=['team', 'Q1'],ascending=[True, False])
# 索引重新0-(n-1)排
df.sort_values('team', ignore_index=True)

3、夹杂排序

df.set_index('name', inplace=True) # 设备name为索引
df.index.names = ['s_name'] # 给索引发名
df.sort_values(by=['s_name', 'team']) # 排序

4、按值巨细排序nsmallest()和nlargest()

s.nsmallest(3) # 最小的3个
s.nlargest(3) # 最大的3个
# 指定列
df.nlargest(3, 'Q1')
df.nlargest(5, ['Q1', 'Q2'])
df.nsmallest(5, ['Q1', 'Q2'])

04、增加点窜

数据的点窜、增加和删除在数据整理进程中经常发生。点窜的情况通常为点窜毛病、格式转换,数据的范例点窜等。

1、点窜数值

df.iloc[0,0] # 查询值
# 'Liver'
df.iloc[0,0] = 'Lily' # 点窜值
df.iloc[0,0] # 检察成果
# 'Lily'

# 将小于60分的成就点窜成60
df[df.Q1 < 60] = 60
# 检察
df.Q1

# 天生一个长度为100的列表
v = [1, 3, 5, 7, 9] * 20

2、替换数据

s.replace(0, 5) # 将列数据中的0换为5
df.replace(0, 5) # 将数据中的一切0换为5
df.replace([0, 1, 2, 3], 4) # 将0~3全换成4
df.replace([0, 1, 2, 3], [4, 3, 2, 1]) # 对应点窜
s.replace([1, 2], method='bfill') # 向下添补
df.replace({0: 10, 1: 100}) # 字典对应点窜
df.replace({'Q1': 0, 'Q2': 5}, 100) # 将指定字段的指定值点窜成100
df.replace({'Q1': {0: 100, 4: 400}}) # 将指定列里的指定值替换为另一个指定的值

3、添补空值

df.fillna(0) # 将空值全点窜成0
# {'backfill', 'bfill', 'pad', 'ffill',None}, 默以为None
df.fillna(method='ffill') # 将空值都点窜成其前一个值
values = {'A': 0, 'B': 1, 'C': 2, 'D': 3}
df.fillna(value=values) # 为各列添补实歧的值
df.fillna(value=values, limit=1) # 只替换第一个

4、点窜索引名

df.rename(columns={'team':'class'})

常用方式以下:

df.rename(columns={"Q1":"a", "Q2": "b"}) # 对表头停止点窜
df.rename(index={0: "x", 1:"y", 2: "z"}) # 对索引停止点窜
df.rename(index=str) # 对范例停止点窜
df.rename(str.lower, axis='columns') # 传索引范例
df.rename({1: 2, 2: 4}, axis='index')

# 对索引名停止点窜
s.rename_axis("animal")
df.rename_axis("animal") # 默许是列索引
df.rename_axis("limbs",axis="columns") # 指定行索引

# 索引为多层索引时可以将type点窜成class
df.rename_axis(index={'type': 'class'})

# 可以用set_axis停止设备点窜
s.set_axis(['a', 'b', 'c'], axis=0)
df.set_axis(['I', 'II'], axis='columns')
df.set_axis(['i', 'ii'], axis='columns',inplace=True)

5、增加列

df['foo'] = 100 # 增加一列foo,一切值都是100
df['foo'] = df.Q1 + df.Q2 # 新列为两列相加
df['foo'] = df['Q1'] + df['Q2'] # 同上
# 把一切为数字的值加起来
df['total'] =df.select_dtypes(include=['int']).sum(1)df['total'] =
df.loc[:,'Q1':'Q4'].APPly(lambda x: sum(x), axis='columns')
df.loc[:, 'Q10'] = '我是新来的' # 也可以
# 增加一列并赋值,不满足条件的为NaN
df.loc[df.num >= 60, '成就'] = '及格'
df.loc[df.num < 60, '成就'] = '分歧格'

6、插出列df.insert()

# 在第三列的位置上插入新列total列,值为每行的总成就
df.insert(2, 'total', df.sum(1))

7、指定列df.assign()

# 增加total列
df.assign(total=df.sum(1))
# 增加两列
df.assign(total=df.sum(1), Q=100)
df.assign(total=df.sum(1)).assign(Q=100)
其他利用示例:
df.assign(Q5=[100]*100) # 新增加一列Q5
df = df.assign(Q5=[100]*100) # 赋值生效
df.assign(Q6=df.Q2/df.Q1) # 计较并增加Q6
df.assign(Q7=lambda d: d.Q1 * 9 / 5 + 32) # 利用lambda# 增加一列,值为表达式成果:True或False
df.assign(tag=df.Q1>df.Q2)
# 比力计较,True为1,False为0
df.assign(tag=(df.Q1>df.Q2).astype(int))
# 映照文案
df.assign(tag=(df.Q1>60).map({True:'及格',False:'不及格'}))
# 增加多个
df.assign(Q8=lambda d: d.Q1*5,
Q9=lambda d: d.Q8+1) # Q8没有生效,不能间接用df.Q8

8、履行表达式df.eval()

# 传入求总分表达式
df.eval('total = Q1+Q3+Q3+Q4')

其他方式:

df['C1'] = df.eval('Q2 + Q3')
df.eval('C2 = Q2 + Q3') # 计较
a = df.Q1.mean()df.eval("C3 =`Q3`+@a") # 利用变量
df.eval("C3 = Q2 > (`Q3`+@a)") #加一个布尔值
df.eval('C4 = name + team', inplace=True) # 立即生效

9、增加行

# 新增索引为100的数据
df.loc[100] = ['tom', 'A', 88, 88, 88, 88]

其他方式:

df.loc[101]={'Q1':88,'Q2':99} # 指定列,无数据列值为NaN
df.loc[df.shape[0]+1] = {'Q1':88,'Q2':99} # 自动增加索引
df.loc[len(df)+1] = {'Q1':88,'Q2':99}
# 批量操纵,可以利用迭代
rows = [[1,2],[3,4],[5,6]]
for row in rows:
df.loc[len(df)] = row

10、追加合并

df = pd.DataFrame([[1, 2], [3, 4]],columns=list('AB'))
df2 = pd.DataFrame([[5, 6], [7, 8]],columns=list('AB'))
df.append(df2)

11、删除

# 删除索引为3的数据
s.pop(3)
# 93s
s

12、删除空值

df.dropna() # 一行中有一个缺失值就删除
df.dropna(axis='columns') # 只保存全有值的列
df.dropna(how='all') # 行或列全没值才删除
df.dropna(thresh=2) # 最少有两个空值时才删除
df.dropna(inplace=True) # 删除并使替换生效

05、高级过滤

先容几个很是好用的复杂数据处置的数据过滤输出方式。

1、df.where()

# 数值大于70
df.where(df > 70)

2、np.where()

# 小于60分为不及格
np.where(df>=60, '及格', '分歧格')

3、df.mask()

# 合适条件的为NaN
df.mask(s > 80)

4、df.lookup()

# 行列不异数目,返回一个array
df.lookup([1,3,4], ['Q1','Q2','Q3']) # array([36, 96, 61])
df.lookup([1], ['Q1']) # array([36])

06、数据迭代

1、迭代Series

# 迭代指定的列
for i in df.name:
print(i)
# 迭代索引和指定的两列
for i,n,q in zip(df.index, df.name,df.Q1):
print(i, n, q)

2、df.iterrows()

# 迭代,利用name、Q1数据
for index, row in df.iterrows():
print(index, row['name'], row.Q1)

3、df.itertuples()

for row in df.itertuples():
print(row)

4、df.items()

# Series取前三个
for label, ser in df.items():
print(label)
print(ser[:3], end='\n\n')

5、按列迭代

# 间接对DataFrame迭代
for column in df:
print(column)

07、函数利用

1、pipe()

利用在全部DataFrame或Series上。

# 对df多重利用多个函数
f(g(h(df), arg1=a), arg2=b, arg3=c)
# 用pipe可以把它们毗连起来
(df.pipe(h)
.pipe(g, arg1=a)
.pipe(f, arg2=b, arg3=c)
)

2、apply()

利用在DataFrame的行或列中,默以为列。

# 将name全数变成小写
df.name.apply(lambda x: x.lower())

3、applymap()

利用在DataFrame的每个元素中。

# 计较数据的长度
def mylen(x):
return len(str(x))
df.applymap(lambda x:mylen(x)) # 利用函数
df.applymap(mylen) # 结果同上

4、map()

利用在Series或DataFrame的一列的每个元素中。

df.team.map({'A':'一班', 'B':'二班','C':'三班', 'D':'四班',})# 列举替换
df['name'].map(f)

5、agg()

# 每列的最大值
df.agg('max')
# 将一切列聚合发生sum和min两行
df.agg(['sum', 'min'])
# 序列多个聚合
df.agg({'Q1' : ['sum', 'min'], 'Q2' : ['min','max']})
# 分组后聚合
df.groupby('team').agg('max')
df.Q1.agg(['sum', 'mean'])

6、transform()

df.transform(lambda x: x*2) # 利用匿名函数
df.transform([np.sqrt, np.exp]) # 挪用多个函数

7、copy()

s = pd.Series([1, 2], index=["a","b"])
s_1 = s
s_copy = s.copy()
s_1 is s # True
s_copy is s # False

技术交换

技术要学会分享、交换,不倡议凭空诬捏。一小我可以走的很快,一群人可以走的更远

本文技术由粉丝群小伙伴分享汇总。技术交换、求职内推、干货汇总、与 5000+来自百度、阿里、头条、腾讯、港大等名企开辟者互动交换~

今朝技术交换群群友已跨越5000人,间接加微信号:pythoner666,增加时最好的备注方式为:知乎+爱好偏向,方便更快获得完整材料、入群。

激烈保举大师关注 Python与数据挖掘 知乎账号和 Python进修与数据挖掘 微信公众号,可以快速领会到最新优良文章。

文章保举

基于 Toad 的评分卡模子全流程详解(含 Python 源码)

Python有哪些杀手级超利害框架或库或利用?

又发现了一个Jupyter Notebook的黑科技,Visual Python支持无代码开辟!

盘点10个让工作效力倍增且风趣的 Python库!

prettytable:一款可完善格式化输出的 Python 库

保举收藏!机械进修建模调参方式总结!

保举收藏!23个机械进修最好入门项目(附源代码)

没看完这11 条,别说你精通 Python 装潢器!

60个 VS Code 神级插件,助力打造最强代码编辑器!

太适用了!Schedule模块, Python 周期使命神器!

这4款数据自动化摸索 Python 神器,处理99%的数据分析题目!

20个数据分析师必会的数据模子,倡议收藏!

真香啊!让 Python 编程腾飞的 24 个神操纵!

深度盘点:30个用于深度进修、自然说话处置和计较机视觉的顶级 Python

全网超具体!用户画像标签系统扶植指南!

机械进修模子考证,这3个 Python 包可轻松处理95%的需求!

精选 30 个炫酷的可视化大屏模板,拿走就用!

够强大!Python 这款可视化大屏不敷百行代码!

深度盘点:8000字具体先容 Python 中的 7 种穿插考证方式

高端人脉微信群

高端人脉微信群

人脉=钱脉,我们相信天下没有聚不拢的人脉,扫码进群找到你所需的人脉,对接你所需的资源。

商业合作微信

商业合作微信

本站创始人微信,13年互联网营销经验,擅长引流裂变、商业模式、私域流量,高端人脉资源丰富。

我有话说......

相关推荐

解密书法高手惯用的5个技巧,立竿见影

解密书法高手惯用的5个技巧,立竿见影

为何那些书法高手写出的字格外有特点?或者说格外漂亮?肯定是有技巧的。在这里,心灵

8个高情商说话技巧

8个高情商说话技巧

所谓情商高,就是会说话,情商与说话是紧密相连、互为体现的。掌握高情商的说话技巧,

3个说话技巧,让你开口就能赢

3个说话技巧,让你开口就能赢

无论说话还是写文章,做报告,抓不住重点真的会错失很多机会,很多关键时刻,也只有一

121页PPT,让人喜欢你的25个沟通技巧,职场脱颖而出的沟通秘诀

121页PPT,让人喜欢你的25个沟通技巧,职场脱颖而出的沟通秘诀

文 | 明哥,前麦肯锡战略咨询顾问,埃森哲管理咨询顾问,一个喜欢用思维导图架构PPT的

八个实用的技巧,提升你的语言交流能力,让你表达得更精准

八个实用的技巧,提升你的语言交流能力,让你表达得更精准

在生活中,我们可能会与各种各样的人打交道。而且你我都知道,提高口头交流技巧,可以

多少人败在不会说话上,情商高的人,说话都会这5个技巧!

多少人败在不会说话上,情商高的人,说话都会这5个技巧!

点击右上角【关注】职视角头条号,分享职场干货,提升职场竞争力。本文共1268字,阅读

开车高手整理了10年的驾驶技巧,全是你最需要的! …

开车高手整理了10年的驾驶技巧,全是你最需要的! …

车安全的基础是技术和经验,好的驾驶技术更是一种艺术。下面是开车高手辛苦一年整理的

Excel表格中最经典的36个小技巧,全在这儿了

Excel表格中最经典的36个小技巧,全在这儿了

本篇是小编以前从海量excel技巧中,精选出的最贴近实用的技巧,共36个,重新配图配文

让女生疯狂的8个接吻技巧,你知道吗?

让女生疯狂的8个接吻技巧,你知道吗?

兄弟们大家好,接下来又到了甜心分享干货时间了!你觉得自己很会接吻吗?今天呢,甜心

不定积分大集合——技巧篇(十分详细)

不定积分大集合——技巧篇(十分详细)

写在前面的话:在数学分析的计算题当中,我们最常见的就是求极限,求导,求不定积分。

女性如何提高床上技巧?

女性如何提高床上技巧?

性生活的享受不仅仅只让对方付出,其实女人也要学会床上的技能,这样才能让自己拥有高

手把手教你查找酒店偷拍摄像头,防偷拍

手把手教你查找酒店偷拍摄像头,防偷拍

去年12月,网友花总用11分钟视频,曝光了五星级酒店“杯子的秘密”。视频在互联网上播

雅思一对一培训机构推荐!选对真的能原地出分

雅思一对一培训机构推荐!选对真的能原地出分

☆实话说:上了一对一,成绩突飞猛进很多,直接飙到7.5,雅思报班真的挺值得的。说原

基本的接吻技巧,男人必学!

基本的接吻技巧,男人必学!

“Kiss”的最基本的四种吻技:提示:吻不单只是单纯的唇与唇之间的接触,真正的吻,需

108个撩人小技巧,把男票撩到腿软!(建议收藏)

108个撩人小技巧,把男票撩到腿软!(建议收藏)

文末更多干货,赶快收藏滑到最后。 撩与被撩其实都是相爱的存在,生活里多一点情趣,

很多绘画初学者不知道的18个技巧?

很多绘画初学者不知道的18个技巧?

学习素描不是先从技法的循序渐进,而是观察能力的循序渐进。也就是说,首先把自己的眼

六级听力200+最强应试技巧+备考攻略

六级听力200+最强应试技巧+备考攻略

首先我们了解一下六级听力分为几个项目,每个项目分值是多少,有什么特点(已经非常了

很全很实用 60个经典的电脑技巧

很全很实用 60个经典的电脑技巧

2、在保存网页前,可以按一下&#39;ESC&#39;键(或脱机工作)再保存,这样保存很快3、用

电脑小白必学的11个win10使用技巧

电脑小白必学的11个win10使用技巧

Hello大家好,我是小凌~Win10发布到现在已经4年了最开始大家使用都在吐槽到现在更新

VMWare 虚拟机使用技巧

VMWare 虚拟机使用技巧

VMWare Workstation作为最常用的个人版虚拟化软件广受工程师的喜爱,其基于Windows环

TA还没有介绍自己。

最近内容

电话咨询: 15924191378
添加微信