㈠ 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]