接待关注 @Python与数据挖掘 ,专注 Python、数据分析、数据挖掘、好玩工具! 在数据分析和数据建模的进程中需要对数据停止清洗和整理等工作,偶然需要对数据增删字段。 下面为大师先容 Pandas 对数据的复杂查询、数据范例转换、数据排序、数据的点窜、数据迭代以及函数的利用方式,梳理不易,记得点赞、关注。文末可加入技术交换。 01、复杂查询现实营业需求常常需要依照一定的条件甚至复杂的组合条件来查询数据,接下来为大师先容若何发挥Pandas数据挑选的无穷能够,为所欲为地取用数据。 1、逻辑运算# Q1成就大于36df.Q1> 36 # Q1成就不小于60分,而且是C组成员 ~(df.Q1< 60) & (df['team'] == 'C') 2、逻辑挑选数据切片( )、.loc 和.iloc 均支持上文所先容的逻辑表达式。 以下是切片( )的逻辑挑选示例: df[df['Q1']== 8] # Q1即是8df[~(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换为5df.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,一切值都是100df['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} # 指定列,无数据列值为NaNdf.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()# 数值大于70df.where(df > 70) 2、np.where()# 小于60分为不及格np.where(df>=60, '及格', '分歧格') 3、df.mask()# 合适条件的为NaNdf.mask(s > 80) 4、df.lookup()# 行列不异数目,返回一个arraydf.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 种穿插考证方式 |
为何那些书法高手写出的字格外有特点?或者说格外漂亮?肯定是有技巧的。在这里,心灵
所谓情商高,就是会说话,情商与说话是紧密相连、互为体现的。掌握高情商的说话技巧,
无论说话还是写文章,做报告,抓不住重点真的会错失很多机会,很多关键时刻,也只有一
文 | 明哥,前麦肯锡战略咨询顾问,埃森哲管理咨询顾问,一个喜欢用思维导图架构PPT的
在生活中,我们可能会与各种各样的人打交道。而且你我都知道,提高口头交流技巧,可以
点击右上角【关注】职视角头条号,分享职场干货,提升职场竞争力。本文共1268字,阅读
车安全的基础是技术和经验,好的驾驶技术更是一种艺术。下面是开车高手辛苦一年整理的
本篇是小编以前从海量excel技巧中,精选出的最贴近实用的技巧,共36个,重新配图配文
兄弟们大家好,接下来又到了甜心分享干货时间了!你觉得自己很会接吻吗?今天呢,甜心
写在前面的话:在数学分析的计算题当中,我们最常见的就是求极限,求导,求不定积分。
性生活的享受不仅仅只让对方付出,其实女人也要学会床上的技能,这样才能让自己拥有高
去年12月,网友花总用11分钟视频,曝光了五星级酒店“杯子的秘密”。视频在互联网上播
☆实话说:上了一对一,成绩突飞猛进很多,直接飙到7.5,雅思报班真的挺值得的。说原
“Kiss”的最基本的四种吻技:提示:吻不单只是单纯的唇与唇之间的接触,真正的吻,需
文末更多干货,赶快收藏滑到最后。 撩与被撩其实都是相爱的存在,生活里多一点情趣,
学习素描不是先从技法的循序渐进,而是观察能力的循序渐进。也就是说,首先把自己的眼
首先我们了解一下六级听力分为几个项目,每个项目分值是多少,有什么特点(已经非常了
2、在保存网页前,可以按一下'ESC'键(或脱机工作)再保存,这样保存很快3、用
Hello大家好,我是小凌~Win10发布到现在已经4年了最开始大家使用都在吐槽到现在更新
VMWare Workstation作为最常用的个人版虚拟化软件广受工程师的喜爱,其基于Windows环
声明:本站内容由网友分享或转载自互联网公开发布的内容,如有侵权请反馈到邮箱 1415941@qq.com,我们会在3个工作日内删除,加急删除请添加站长微信:15924191378
Copyright @ 2022-2024 私域运营网 https://www.yunliebian.com/siyu/ Powered by Discuz! 浙ICP备19021937号-4