在刚开始使用pandas DataFrame的时候,对于数据的选取,修改和切片经常困惑,这里总结了一些常用的操作。
pandas主要提供了三种属性用来选取行/列数据:
先初始化一个DateFrame做例子
import numpy as np import pandas as pd df = pd.DataFrame([['Snow','M',22],['Tyrion','M',32],['Sansa','F',18],['Arya','F',14]], columns=['name','gender','age'])
df是这样的
In [35]: df Out[35]: name gender age 0 Snow M 22 1 Tyrion M 32 2 Sansa F 18 3 Arya F 14
如果每列都有column name,比如这里是:
In [42]: df.columns Out[42]: Index(['name', 'gender', 'age'], dtype='object')
1. df['column_name'] ,df[row_start_index, row_end_index] 选取指定整列数据
df['name'] df['gender'] df[['name','gender']] #选取多列,多列名字要放在list里 df[0:] #第0行及之后的行,相当于df的全部数据,注意冒号是必须的 df[:2] #第2行之前的数据(不含第2行) df[0:1] #第0行 df[1:3] #第1行到第2行(不含第3行) df[-1:] #最后一行 df[-3:-1] #倒数第3行到倒数第1行(不包含最后1行即倒数第1行,这里有点烦躁,因为从前数时从第0行开始,从后数就是-1行开始,毕竟没有-0)
2. loc,在知道列名字的情况下,df.loc[index,column] 选取指定行,列的数据
loc也提供了五种参数形式
input
example(摘自官方文档)
output
行标签
df.loc[‘viper']
选取viper那一行
行标签数组
df.loc[[‘viper', ‘sidewinder']]
选取行标签为viper、sidewinder
行标签切片
df.loc[‘cobra':‘viper', ‘max_speed']
选取从cobra到viper行的max_speed列
布尔值数组
df.loc[[False, False, True]]
—
函数
df.loc[df[‘shield'] > 6, [‘max_speed']]
选取shield列大于6的那一行的max_speed数据
注意 df.loc[df[‘one']>10]这样的写法是可以正常选出one列大于10的数据
# df.loc[index, column_name],选取指定行和列的数据 df.loc[0,'name'] # 'Snow' df.loc[0:2, ['name','age']] #选取第0行到第2行,name列和age列的数据, 注意这里的行选取是包含下标的。 df.loc[[2,3],['name','age']] #选取指定的第2行和第3行,name和age列的数据 df.loc[df['gender']=='M','name'] #选取gender列是M,name列的数据 df.loc[df['gender']=='M',['name','age']] #选取gender列是M,name和age列的数据
3. iloc,在column name特别长或者index是时间序列等各种不方便输入的情况下,可以用iloc (i = index), iloc完全用数字来定位 iloc[row_index, column_index]
iloc提供了五种参数形式
input
example
output
整数(行索引)
df.iloc[5]
选取第6行数据
整数数组
df.iloc[[1,3,5]]
选取第2,4,6行数据
整数切片
df.iloc[1:3]
选取2~4行数据(不包含第4行数据)
布尔值数组
df.iloc[[True,False,True]
选取第1,3行数据
函数
df.iloc[(df[‘one']>10).tolist()]
选取'one'这列大于10的那一行数据
注意:iloc接受有返回值的函数作为参数,但要保证函数返回的是整数/整数list,布尔值/布尔list
如果直接运行 df.iloc[df[‘one']>10]
则会报错 NotImplementedError: iLocation based boolean indexing on an integer type is not available
因为df[‘one'] > 10 返回的是 series类型的数据
除此之外,还可以进行组合切片
input
example
output
整数(行索引)
df.iloc[5,1]
选取第6行,第2列的数据
整数数组
df.iloc[[1,3],[1,2]]
选取第2,4行;2,3列的数据
整数切片
df.iloc[1:3,1:3]
选取第2,3行;2,3列的数据
布尔值数组
df.iloc[[True,True,False],[True,False,True]]
选取第1,2行;1,3列的数据
要注意的是,我们用df[参数]也可以进行切片,但这种方式容易引起chained indexing 问题。除此之外,**df[lable1][lable2]**的操作是线性的,对lable2的选取是在df[lable1]的基础上进行,速度相对较慢。所以在对数据进行切片的时候尽量使用iloc这类的方法
df.iloc[0,0] #第0行第0列的数据,'Snow' df.iloc[1,2] #第1行第2列的数据,32 df.iloc[[1,3],0:2] #第1行和第3行,从第0列到第2列(不包含第2列)的数据 df.iloc[1:3,[1,2] #第1行到第3行(不包含第3行),第1列和第2列的数据
4. ix, ix很强大,loc和iloc的功能都能做到 ix[row_index, column_index]
ix虽然强大,然而已经不再被推荐,因为在最新版的pandas里面,ix已经成为deprecated。(https://github.com/pandas-dev/pandas/issues/14218)
大概是因为可以混合label和position导致了很多用户问题和bug。
所以,用label就用loc,用position就用iloc。
df.ix[0,0] #第0行第0列的数据,'Snow' df.ix[0,[1,2]] #第0行,第1列和第2列的数据 df.ix[0:2,[1,2]] #第0行到第2行(包含第3行),第1列和第2列的数据 df.ix[1,0:2] #第1行,从第0列到第2列(不包含第2列)的数据
切片时,iloc行不含下标上限,loc,ix行包含,列iloc和ix都不含列下标上限。(设计者的缺憾。。。)
到此这篇关于pandas DataFrame 数据选取,修改,切片的实现的文章就介绍到这了,更多相关pandas 数据选取,修改,切片内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 群星.2003-存为爱2CD【环球】【WAV+CUE】
- 韩磊《试音天碟》高清音频[WAV+CUE]
- 邓涛《寂寞蒲公英(黑胶CD)》[WAV]
- 江志丰.2011-爱你的理由【豪记】【WAV+CUE
- 群星《传承-太平洋影音45周年纪念版 (CD2)》[320K/MP3][140.01MB]
- 群星《传承-太平洋影音45周年纪念版 (CD2)》[FLAC/分轨][293.29MB]
- 首首经典《滚石红人堂I 一人一首成名曲 4CD》[WAV+CUE][2.5G]
- s14上单t0梯度怎么排名 s14世界赛上单t0梯度排行榜
- tes目前进了几次s赛 LPL队伍tes参加全球总决赛次数总览
- 英雄联盟巅峰礼赠什么时候开始 2024巅峰礼赠活动时间介绍
- 冯骥发文谈睡觉重要性 网友打趣:求求你先做DLC
- 博主惊叹《少女前线2》万圣节大雷皮肤:这真能过审吗?
- 《生化危机8》夫人比基尼Mod再引骂战:夸张身材有错吗?
- 江蕙.1994-悲情歌声【点将】【WAV+CUE】
- 戴娆.2006-绽放【易柏文化】【WAV+CUE】