㈠ python的字符串切片及常用方法
获取Python字符串中的某字符可以使用索引:
截取字符串中的一段字符串可以使用切片,切片在方括号中使用冒号:来分隔需要截取的首尾字符串的索引,方式是包括开头,不包括结尾
当尾索引没有给出时,默认截取到字符串的末尾
当头索引没有给出的时候默认从字符串开头开始截取
当尾索引和头索引都没有给出的时候,默认返回整个字符串,不过这只是一个浅拷贝
当尾索引大于总的字符串长度时,默认只截取到字符串末尾,很明显使用这种方法来截取一段到字符串末尾的子字符串是非常不明智的,应该是不给出尾索引才是最佳实践
当头索引为负数时,则是指从字符串的尾部开始计数,最末尾的字符记为-1,以此类推,因此此时应该注意尾索引的值,尾索引同样可以为负数,如果尾索引的值指明的字符串位置小于或等于头索引,此时返回的就是空字符串
切片是Python中截取字符串最强大的功能。
以下列举部分Python字符串常用的方法:
㈡ Python 数据处理(二十九)—— MultiIndex 高级索引操作
从语法上将 MultiIndex 与 .loc 集成在高级索引中是有些挑战性。通常, MultiIndex 的键采用元组的形式。例如
注意 : 虽然也可以使用 df.loc['bar', 'two'] ,但这种简写的符号通常会导致歧义
如果你还想用 .loc 索引某一列,你必须像这样使用一个元组
想要获取第一个级别的某一标签的所有元素,并不需要传递元组,例如
而不是使用 df.loc[('bar',),] (等价于 df.loc['bar',] )
当然,也可以进行切片
通过提供一个元组切片,选择范围内的值
传递一个标签或元组列表的工作原理类似于 reindex
需要注意的是,在 pandas 中,当涉及到索引时,元组和列表的处理方式并不相同。
元组被解释为一个多级键,而列表则用来指定多个键。或者换句话说,元组是横向的,列表是纵向的
您可以通过提供多个索引器来对 MultiIndex 进行切片
可以使用 slice(None) 选择该级别的所有内容,没有指定索引的级别默认为 slice(None)
通常,切片的两段都会包括在内,因为这是标签索引
在使用 .loc 的时候,最好同时指定索引(行)和标签(列),因为在某些情况下,传递的索引可能会被解析为两个轴而不是 MultiIndex
你应该使用
而不是
例如
使用切片,列表和标签的基本 MultiIndex 切片操作
你可以使用 pandas.IndexSlice 来让 : 语法显得更自然一些,而不是使用 slice(None)
可以使用这种方法在多个轴同时进行相当复杂的选择
您可以使用布尔索引器来进行与值相关的选择
您还可以为 .loc 指定 axis 参数,以在某一个轴上传递切片
此外,您可以使用以下方法设置这些值
也可以在等号右边使用可对齐对象
DataFrame 的 xs() 方法还接受一个 level 参数,以便更容易在 MultiIndex 的特定级别上选择数据
使用切片
您还可以为 xs 提供 axis 参数来选择列
使用切片
xs 还允许使用多个键进行选择
使用切片
您可以将 drop_level=False 传递给 xs ,以保留所选择的级别
使用 drop_level=True (默认值)与上面的结果比较
在 pandas 对象的 reindex() 和 align() 方法中使用 level 参数,可以在一个级别上广播值
swaplevel() 方法可以切换两个级别的顺序
reorder_levels() 方法是 swaplevel 方法的推广,允许你在一个步骤中排列分层索引级别
rename() 方法可用于重命名 MultiIndex 的标签,通常用于重命名 DataFrame 的列
rename 的 columns 参数允许指定需要重命名的列的字典
这个方法也可以用来重命名 DataFrame 主索引的特定标签
rename_axis() 方法用于重命名 Index 或 MultiIndex 的名称。
特别地,可以指定 MultiIndex 的级别名称,可以使用 reset_index() 将 MultiIndex 移动到列
注意 : DataFrame 的列是一个索引,因此使用 rename_axis 和 columns 参数可以改变该索引的名称
rename 和 rename_axis 都支持指定字典、 Series 或映射函数来将标签/名称映射到新值
当直接使用 Index 对象而不是通过 DataFrame 工作时,可以使用 Index.set_names() 来更改名称
您不能通过 level 设置 MultiIndex 的名称
使用 Index.set_names() 替代
㈢ python切片问题
题主你好,
字符串切片, 通常情况下有这么几种情况:
a. 第1种情况, 起始索引和结束索引都未省略时, 得到的结果用我的话说是: 包前不包后, 这一点通过题主的问题可以得知,是知道这一点的.
举例: a = '01234' a[2:4]的值为'23';
b.第2种情况,起始索引省略, 结束索引未省略, 此时起始索引默认值为0.
举例来说: a = '012345' a[:2]等价于a[0:2],按照包前不包后的原则, 最后的结果: '01'
c.第3种情况,起始索引未省略, 结束索引省略, 此时结束索引默认值为被分片字符串的长度.
举例来说: a = '01234' a[2:]等价于a[2:len(a)]也就是a[2:5], 还是按照包前不包后的原则,最后的结果: '234'
d.第4种情况, 起始索引和结束索引都省略, 则根据b和c所说的, 起始索引默认为0,结束索引默认为字符串的长度len(字符串).
举例来说: a = '01234' a[:]等价于a[0:len(a)],也就是a[0:5], 还是按照包前不包后的原则, 最后得到结果: '01234'
--------
上面b,c情况的依据:
上面所说为分片索引也可以是负数, 负数是从右向左数, 与正数分片索引不同的是, 负数的分片索引起始值为-1, 正数的分片索引起始值为0.
举例来说中: a = '01234', a[0:-1], 因为-1是字符串最后一个字符的索引, 再根据上面所说的包前不包后原则, 结果就是去掉最后一个字符,剩下的内容: '0123'
希望可以帮到题主, 欢迎追问.
㈣ Python中使用负数索引的切片
Python中的序列是可以采用负数的索引来访问的,其范围是 -1 到序列的负长度,也就是
-len(sequence) <= index <= -1,负索引以序列的结束为起点。
除了提供按照索引,访问序列中的单个元素,Python也提供了切片的方式访问序列中的子序列的方式,这就是切片的访问方式,其一般语法如下:
sequence[starting_index:ending_index]
如此,我们会得到从starting_index对应元素开始,到ending_index对应元素结束,但是不包括ending_index对应元素,所组成的子序列的内容。
起止索引都是可选的选项,如果没有提供或者为None,那么开始索引默认为0,结束索引默认为序列最末尾的索引。切片的访问模式,有第三个值,类似于步长,其访问类似下面代码。
(4)初中python切片索引题库扩展阅读
python的索引:
索引的基本格式
变量名[x]--索引为x的值;
变量名[i,j]--索引从i到j-1的值;
索引值(从左往右)从0开始,到N-1结束(有始无终);
索引值(从右往左)从-1开始,到-N结束。
索引的其他特点:可嵌套性。
由于高级数据类型具有可嵌套性,所以索引也具有可嵌套性。其格式为:
变量[index_1][……][index_n]
执行方向:从左向右依次执行。
㈤ Python用数列索引数列的问题
首先:python中的列表是不能这样索引的,报的错翻译过来是:列表的索引要么是切片要么是数字而不能是一个列表。
1 数字:如 y[1], y[3], y[-1](取倒数第一个元素)
2 切片:如y[1:3](取第1到第3个元素),y[:3](取前三个元素),y[3:](取第三个元素之后的所有元素)
其次,要实现你所需的功能,有两种方案:
1 使用循环来实现
x=[0,1,2,3,4,5,6]
y=[11,22,33,44,55,66,77]
random.shuffle(x)
y2=[]#存储结果
foriinrange(len(x)):
y2.append(y[x[i]])
2 使用numpy实现,numpy是python中常用的数据分析库,需要单独安装
importnumpyasnp
importrandom
x=[0,1,2,3,4,5,6]
y=np.array([11,22,33,44,55,66,77])
random.shuffle(x)
y[x]