第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

Pandas 字符串操作

1. 前言

上一節(jié)我們學習了 Pandas 對于數(shù)值數(shù)據(jù)排序和排名操作,除了數(shù)值數(shù)據(jù)之外,字符串數(shù)據(jù)也是我們數(shù)據(jù)處理和分析中最常見到的數(shù)據(jù)之一,而對于字符串的處理成為了我們數(shù)據(jù)處理中一個重要的工作,Pandas 作為專業(yè)的數(shù)據(jù)處理分析工具,早就為用戶封裝好了各種字符串操作的函數(shù),極大的提高了字符串處理的便捷和效率,接下來我們將打開 Pandas 字符串操作的大門,一起學習豐富且強大的字符串操作。

2. Pandas 字符串操作

Pandas 對字符串的操作是基于 Series 對象的 str 屬性,該屬性表示就是字符串對象,他下面封裝了多種字符串操作函數(shù),正是通過這些函數(shù),我們可以方便的處理字符串,值得注意的是,Pandas 中的這些操作函數(shù)是單獨封裝的,實現(xiàn)上不同于 python 語言自帶的字符串操作函數(shù),使用起來更加的便捷,效率也更高。另外,Pandas 的 DataFrame 數(shù)據(jù)對象是不含該屬性的,因此也不具有相應的字符串操作函數(shù),但是我們在實際應用中,往往會根據(jù)需要獲取 DataFrame 的數(shù)據(jù)子集返回 Series 數(shù)據(jù)對象,在通過 str 屬性進行字符串的操作。

Pandas 中提供了大量的字符串操作方法,我們這里依據(jù)是否影響字符串長度或內(nèi)容,選取了 Pandas 庫中常用的一些字符串操作函數(shù)進行詳細講解。

**Tips:** 字符串中的操作函數(shù),是區(qū)分大小寫的,這點在使用時要注意。

在講解之前,我們還是先把 Excel 中的數(shù)據(jù)做一下處理,方便我們后面各個函數(shù)操作效果的呈現(xiàn)。
圖片描述

解析后輸出的數(shù)據(jù)結(jié)果:

圖片描述

2.1 影響字符串長度或內(nèi)容的函數(shù)

序號 函數(shù) 說明
1 str.split() 拆分字符串
2 str.slice() 按給定的位置截取字符串
3 str.strip() 刪除字符串中的空格或者換行符
4 str.lower() 將字符串轉(zhuǎn)換為小寫
5 str.upper() 將字符串轉(zhuǎn)換為大寫
6 str.cat() 連接字符串列
7 str.replace() 替換字符串中的元素
8 str.swapcase() 字符串中的大小寫互換

下面我們將通過代碼操作詳細介紹這幾個函數(shù)的使用方法:

1. split() 函數(shù)

該函數(shù)根據(jù)指定的元素分割字符串。

# 導入pandas包
import pandas as pd
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/第16小節(jié)/execl數(shù)據(jù)demo.xlsx"
# 解析數(shù)據(jù)
data = pd.read_excel(data_path)
print(data)
# --- 輸出結(jié)果 ---
             編程語言     推出時間    價格          主要創(chuàng)始人
0            java    199545.6               James Gosling
1  python@163.com    199167.0          Guido van Rossum\n
2               C    197233.9  Dennis MacAlistair Ritchie
3       js@qq.com    199559.5                Brendan Eich
4             php  2012年\n  69.9              Rasmus Lerdorf
5     C++            198375.0           Bjarne Stroustrup

# split() 函數(shù)
new_series=data["編程語言"]
split_res= new_series.str.split("@")
print(split_res)
# --- 輸出結(jié)果 ---
0               [java]
1    [python, 163.com]
2                  [C]
3         [js, qq.com]
4                [php]
5        [C++        ]
Name: 編程語言, dtype: object

結(jié)果解析:首先我們獲得 DataFrame 的 “編程語言” 列,返回的數(shù)據(jù)結(jié)構(gòu)為 Series ,我們通過 str 屬性的 split () 函數(shù),傳入分割依據(jù)的字符,通過結(jié)果可以看到,存在 @ 字符的字符串均被分割成了多個子元素,返回結(jié)果也是由列表構(gòu)成的 Series 數(shù)據(jù)集。

2. slice() 函數(shù)

該函數(shù)根據(jù)給定開始和結(jié)束的下標位置,截取字符串,注意是左閉右開,不包含右邊的下標位置,該函數(shù)有三參數(shù):

  • start :開始下標
  • stop :結(jié)束下標
  • step :步長
# --- 解析 data 數(shù)據(jù)結(jié)果 ---
             編程語言     推出時間    價格            主要創(chuàng)始人
0            java    199545.6               James Gosling
1  python@163.com    199167.0          Guido van Rossum\n
2               C    197233.9  Dennis MacAlistair Ritchie
3       js@qq.com    199559.5                Brendan Eich
4             php  2012年\n  69.9              Rasmus Lerdorf
5     C++            198375.0           Bjarne Stroustru

# data 解析出來的數(shù)據(jù)
# slice() 函數(shù)
new_series=data["編程語言"]
slice_res= new_series.str.slice(2,4)
print(slice_res)
# --- 輸出結(jié)果 ---
0    va
1    th
2      
3    @q
4     p
5    + 
Name: 編程語言, dtype: object

結(jié)果解析:這里我們指定 "編程語言" 列每個字符串從下標 2 截取到下標 4,因為下標是從 0 開始的,因此也就是截取每個字符串中第 3 和第 4 個字符,可以看到每個輸出的結(jié)果。

3. strip() 函數(shù)

該函數(shù)會去掉字符串中頭和尾的空格已經(jīng)換行符。

# --- 解析 data 數(shù)據(jù)結(jié)果 ---
             編程語言     推出時間    價格            主要創(chuàng)始人
0            java    199545.6               James Gosling
1  python@163.com    199167.0          Guido van Rossum\n
2               C    197233.9  Dennis MacAlistair Ritchie
3       js@qq.com    199559.5                Brendan Eich
4             php  2012年\n  69.9              Rasmus Lerdorf
5     C++            198375.0           Bjarne Stroustru

# data 解析出來的數(shù)據(jù)
# strip() 函數(shù)
new_series=data["編程語言"]
slice_res= new_series.str.strip()
print(slice_res)
# --- 輸出結(jié)果 ---
0              java
1    python@163.com
2                 C
3         js@qq.com
4               php
5               C++
Name: 編程語言, dtype: object

結(jié)果解析:通過輸出結(jié)果可以看到,“C++” 中原數(shù)據(jù)后面有空格在,使用函數(shù)操作后,空格被刪除。

4. lower() 函數(shù)

該函數(shù)用于將字符串中的所有大寫字母轉(zhuǎn)換為小寫字母。

# --- 解析 data 數(shù)據(jù)結(jié)果 ---
             編程語言     推出時間    價格            主要創(chuàng)始人
0            java    199545.6               James Gosling
1  python@163.com    199167.0          Guido van Rossum\n
2               C    197233.9  Dennis MacAlistair Ritchie
3       js@qq.com    199559.5                Brendan Eich
4             php  2012年\n  69.9              Rasmus Lerdorf
5     C++            198375.0           Bjarne Stroustru

# data 解析出來的數(shù)據(jù)
# lower() 函數(shù)
new_series=data["編程語言"]
slice_res= new_series.str.lower() 
print(slice_res)
# --- 輸出結(jié)果 ---
0              java
1    python@163.com
2                 c
3         js@qq.com
4               php
5       c++        
Name: 編程語言, dtype: object

結(jié)果解析:通過輸出結(jié)果可以看到,“編程語言” 列所有的大寫字母都轉(zhuǎn)換成了小寫。

5. upper() 函數(shù)

該函數(shù)用于將字符串中的所有小寫字母轉(zhuǎn)換為大寫字母。

# --- 解析 data 數(shù)據(jù)結(jié)果 ---
             編程語言     推出時間    價格            主要創(chuàng)始人
0            java    199545.6               James Gosling
1  python@163.com    199167.0          Guido van Rossum\n
2               C    197233.9  Dennis MacAlistair Ritchie
3       js@qq.com    199559.5                Brendan Eich
4             php  2012年\n  69.9              Rasmus Lerdorf
5     C++            198375.0           Bjarne Stroustru

# data 解析出來的數(shù)據(jù)
# upper() 函數(shù)
new_series=data["編程語言"]
slice_res= new_series.str.upper() 
print(slice_res)
# --- 輸出結(jié)果 ---
0              JAVA
1    PYTHON@163.COM
2                 C
3         JS@QQ.COM
4               PHP
5       C++        
Name: 編程語言, dtype: object

結(jié)果解析:通過輸出結(jié)果可以看到,"編程語言" 這一列所有的小寫字母均轉(zhuǎn)換為了大寫字母。

6. cat() 函數(shù)

該函數(shù)用于將兩列合并成一列數(shù)據(jù),前提是兩列都是字符,如果是數(shù)值的話會報錯。

# --- 解析 data 數(shù)據(jù)結(jié)果 ---
             編程語言     推出時間    價格                       主要創(chuàng)始人
0            java    199545.6               James Gosling
1  python@163.com    199167.0          Guido van Rossum\n
2               C    197233.9  Dennis MacAlistair Ritchie
3       js@qq.com    199559.5                Brendan Eich
4             php  2012年\n  69.9              Rasmus Lerdorf
5     C++            198375.0           Bjarne Stroustrup

# data 解析出來的數(shù)據(jù)
# cat() 函數(shù)
new_series=data["編程語言"]
new_series_two=data["主要創(chuàng)始人"]
slice_res= new_series.str.cat(new_series_two) 
print(slice_res)
# --- 輸出結(jié)果 ---
0                   javaJames Gosling
1    python@163.comGuido van Rossum\n
2         CDennis MacAlistair Ritchie
3               js@qq.comBrendan Eich
4                   phpRasmus Lerdorf
5        C++        Bjarne Stroustrup
Name: 編程語言, dtype: object

結(jié)果解析:通過 cat () 函數(shù),將 “編程語言” 和 “主要創(chuàng)始人” 兩列進行合并,可以看到輸出結(jié)果中的合并結(jié)果。

7. replace() 函數(shù)

該函數(shù)可用于替換字符串的內(nèi)容。

# --- 解析 data 數(shù)據(jù)結(jié)果 ---
             編程語言     推出時間    價格                       主要創(chuàng)始人
0            java    199545.6               James Gosling
1  python@163.com    199167.0          Guido van Rossum\n
2               C    197233.9  Dennis MacAlistair Ritchie
3       js@qq.com    199559.5                Brendan Eich
4             php  2012年\n  69.9              Rasmus Lerdorf
5     C++            198375.0           Bjarne Stroustrup

# data 解析出來的數(shù)據(jù)
# replace() 函數(shù)
new_series=data["編程語言"]
slice_res= new_series.str.replace("com","cn") 
print(slice_res)
# --- 輸出結(jié)果 ---
0             java
1    python@163.cn
2                C
3         js@qq.cn
4              php
5      C++        
Name: 編程語言, dtype: object
      

結(jié)果解析:這里我們將 “編程語言” 列字符串中的 com 替換為 cn,通過輸出結(jié)果可以看到替換的效果。

8. swapcase() 函數(shù)

該函數(shù)用于將字符串中的大小寫進行相互轉(zhuǎn)換(大寫轉(zhuǎn)換為小寫,小寫轉(zhuǎn)換為大寫)。

# --- 解析 data 數(shù)據(jù)結(jié)果 ---
             編程語言     推出時間    價格            主要創(chuàng)始人
0            java    199545.6               James Gosling
1  python@163.com    199167.0          Guido van Rossum\n
2               C    197233.9  Dennis MacAlistair Ritchie
3       js@qq.com    199559.5                Brendan Eich
4             php  2012年\n  69.9              Rasmus Lerdorf
5     C++            198375.0           Bjarne Stroustrup

# data 解析出來的數(shù)據(jù)
# swapcase() 函數(shù)
new_series=data["主要創(chuàng)始人"]
slice_res= new_series.str.swapcase() 
print(slice_res)
# --- 輸出結(jié)果 ---
0                 jAMES gOSLING
1            gUIDO VAN rOSSUM\n
2    dENNIS mACaLISTAIR rITCHIE
3                  bRENDAN eICH
4                rASMUS lERDORF
5             bJARNE sTROUSTRUP
Name: 主要創(chuàng)始人, dtype: object
   

結(jié)果解析:這里我們通過 swapcase 函數(shù)將 “主要創(chuàng)始人” 列中字符串的大小寫進行了互換,通過輸出結(jié)果可以看到互換的效果。

2.2 不影響字符串長度或內(nèi)容的函數(shù)

序號 函數(shù) 說明
1 str.len() 計算字符串的長度
2 str.contains() 查詢字符串是否包含某個字符或子字符串
3 str.find() 查詢元素第一次在字符串中出現(xiàn)的位置
4 str.count() 查詢某個元素出現(xiàn)的次數(shù)
5 str.startswith() 查詢字符串是否以某個元素開頭
6 str.endswith() 查詢字符串是否以某個元素結(jié)尾
7 str.istitle() 查詢字符串是否首字母大寫其他都是小寫

下面我們將通過代碼操作詳細介紹這幾個函數(shù)的使用方法:

1. len() 函數(shù)

該函數(shù)用于返回字符串的的長度,包括空格和回車符。

# 導入pandas包
import pandas as pd
data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/第16小節(jié)/execl數(shù)據(jù)demo.xlsx"
# 解析數(shù)據(jù)
data = pd.read_excel(data_path)
print(data)
# --- 輸出結(jié)果 ---
             編程語言     推出時間    價格                       主要創(chuàng)始人
0            java    199545.6               James Gosling
1  python@163.com    199167.0          Guido van Rossum\n
2               C    197233.9  Dennis MacAlistair Ritchie
3       js@qq.com    199559.5                Brendan Eich
4             php  2012年\n  69.9              Rasmus Lerdorf
5     C++            198375.0           Bjarne Stroustrup

# data 解析出來的數(shù)據(jù)
# len() 函數(shù)
new_series=data["主要創(chuàng)始人"]
slice_res= new_series.str.len() 
print(slice_res)
# --- 輸出結(jié)果 ---
0    13
1    17
2    26
3    12
4    14
5    17
Name: 主要創(chuàng)始人, dtype: int64

結(jié)果解析:通過該函數(shù)可以輸出字符串的長度,“主要創(chuàng)始人” 列的第二個字符加上空格和回車符工 17 個字符,如果字符前后存在空格,也是加入計算的。

2. contains() 函數(shù)

該函數(shù)用于檢測字符串是否包含某個字符或者是子串,返回值為布爾型。

# --- 解析 data 數(shù)據(jù)結(jié)果 ---
             編程語言     推出時間    價格                       主要創(chuàng)始人
0            java    199545.6               James Gosling
1  python@163.com    199167.0          Guido van Rossum\n
2               C    197233.9  Dennis MacAlistair Ritchie
3       js@qq.com    199559.5                Brendan Eich
4             php  2012年\n  69.9              Rasmus Lerdorf
5     C++            198375.0           Bjarne Stroustrup

# data 解析出來的數(shù)據(jù)
# contains() 函數(shù)
new_series=data["編程語言"]
slice_res= new_series.str.contains("com") 
print(slice_res)
# --- 輸出結(jié)果 ---
0    False
1     True
2    False
3     True
4    False
5    False
Name: 編程語言, dtype: bool

結(jié)果解析:通過該函數(shù)檢測 “編程語言” 列,字符串是否含有子串 com ,該列只有第 2 行和第 4 行含有 com 子串,所以這兩行的檢測結(jié)果為 True,其他行為 False。

3. find() 函數(shù)

該函數(shù)用于檢測字符串中第一次出現(xiàn)某個子串或者字符的下標位置,如果不存在則返回為 -1。

# --- 解析 data 數(shù)據(jù)結(jié)果 ---
             編程語言     推出時間    價格                       主要創(chuàng)始人
0            java    199545.6               James Gosling
1  python@163.com    199167.0          Guido van Rossum\n
2               C    197233.9  Dennis MacAlistair Ritchie
3       js@qq.com    199559.5                Brendan Eich
4             php  2012年\n  69.9              Rasmus Lerdorf
5     C++            198375.0           Bjarne Stroustrup

# data 解析出來的數(shù)據(jù)
# find() 函數(shù)
new_series=data["編程語言"]
slice_res= new_series.str.find("com") 
print(slice_res)
# --- 輸出結(jié)果 ---
0    -1
1    11
2    -1
3     6
4    -1
5    -1
Name: 編程語言, dtype: int64
       

結(jié)果解析:通過該函數(shù)進行檢測,可以看到 “編程語言” 列中字符串出現(xiàn) com 子串的位置下標,第 2 行為 11,第 4 行為 6,其他行因為不存在該子串,所以返回 - 1。

4. count() 函數(shù)

該函數(shù)用于統(tǒng)計字符串中出現(xiàn)某個子串或者字符的次數(shù)。

# --- 解析 data 數(shù)據(jù)結(jié)果 ---
             編程語言     推出時間    價格                       主要創(chuàng)始人
0            java    199545.6               James Gosling
1  python@163.com    199167.0          Guido van Rossum\n
2               C    197233.9  Dennis MacAlistair Ritchie
3       js@qq.com    199559.5                Brendan Eich
4             php  2012年\n  69.9              Rasmus Lerdorf
5     C++            198375.0           Bjarne Stroustrup

# data 解析出來的數(shù)據(jù)
# count() 函數(shù)
new_series=data["編程語言"]
slice_res= new_series.str.count("o") 
print(slice_res)
# --- 輸出結(jié)果 ---
0    0
1    2
2    0
3    1
4    0
5    0
Name: 編程語言, dtype: int64
       

結(jié)果解析:通過該函數(shù)檢測 “編程語言” 列,各個字符串中出現(xiàn)字符 ‘o’ 的次數(shù),通過輸出結(jié)果可以看到每一個子串中該字符出現(xiàn)的次數(shù)。

5. startswith() 函數(shù)

該函數(shù)用于檢測字符串是否以某個字符或者子串開始,返回結(jié)果為布爾型。

# --- 解析 data 數(shù)據(jù)結(jié)果 ---
             編程語言     推出時間    價格          主要創(chuàng)始人
0            java    199545.6               James Gosling
1  python@163.com    199167.0          Guido van Rossum\n
2               C    197233.9  Dennis MacAlistair Ritchie
3       js@qq.com    199559.5                Brendan Eich
4             php  2012年\n  69.9              Rasmus Lerdorf
5     C++            198375.0           Bjarne Stroustrup

# data 解析出來的數(shù)據(jù)
# startswith() 函數(shù)
new_series=data["編程語言"]
slice_res= new_series.str.startswith("j") 
print(slice_res)
# --- 輸出結(jié)果 ---
0     True
1    False
2    False
3     True
4    False
5    False
Name: 編程語言, dtype: bool

結(jié)果解析:通過該函數(shù),檢測 “編程語言” 列各個字符串是否以字符 ‘j’ 開始,可以看到輸出結(jié)果只有第 1 行和第 4 行是的。

6. endswith() 函數(shù)

該函數(shù)用于檢測字符串是否以某個字符或者子串結(jié)尾,返回結(jié)果為布爾型。

# --- 解析 data 數(shù)據(jù)結(jié)果 ---
             編程語言     推出時間    價格          主要創(chuàng)始人
0            java    199545.6               James Gosling
1  python@163.com    199167.0          Guido van Rossum\n
2               C    197233.9  Dennis MacAlistair Ritchie
3       js@qq.com    199559.5                Brendan Eich
4             php  2012年\n  69.9              Rasmus Lerdorf
5     C++            198375.0           Bjarne Stroustrup

# data 解析出來的數(shù)據(jù)
# endswith() 函數(shù)
new_series=data["編程語言"]
slice_res= new_series.str.endswith("p") 
print(slice_res)
# --- 輸出結(jié)果 ---
0    False
1    False
2    False
3    False
4     True
5    False
Name: 編程語言, dtype: bool
# 結(jié)果解析:通過該函數(shù)對“編程語言”列的字符串進行檢測,是否以字符 'p' 結(jié)尾,通過輸出結(jié)果可以看到只有第5行的 "php" 是以該字符為結(jié)尾的,檢測結(jié)果為 True 。        

7. istitle() 函數(shù)

該函數(shù)用于檢測字符串中每個單詞是否以大寫字符開頭,并且其他的字符均為小寫的內(nèi)容,這里要注意,檢測的單位是字符串中的每個單詞。

# --- 解析 data 數(shù)據(jù)結(jié)果 ---
             編程語言     推出時間    價格          主要創(chuàng)始人
0            java    199545.6               James Gosling
1  python@163.com    199167.0          Guido van Rossum\n
2               C    197233.9  Dennis MacAlistair Ritchie
3       js@qq.com    199559.5                Brendan Eich
4             php  2012年\n  69.9              Rasmus Lerdorf
5     C++            198375.0           Bjarne Stroustrup

# data 解析出來的數(shù)據(jù)
# istitle() 函數(shù)
new_series=data["主要創(chuàng)始人"]
slice_res= new_series.str.istitle() 
print(slice_res)
# --- 輸出結(jié)果 ---
0     True
1    False
2    False
3     True
4     True
5     True
Name: 主要創(chuàng)始人, dtype: bool

結(jié)果解析:通過該函數(shù)檢測 “主要創(chuàng)始人” 列中各個字符串的每個單詞是否以大寫字母開頭,該單詞的其他字符為小寫,因為第 2 行字符串的 “van” 單詞不是以大寫字母開頭,所有為 False,第 3 行字符串的 “MacAlistair” 雖然是以大寫字符開頭,但是該單詞的其他字符不全是小寫,因此也是返回 False 。

3. 小結(jié)

本節(jié)課程我們主要學習了 Pandas 庫對于字符串的操作處理,Pandas 庫提供了大量的字符串操作函數(shù),我們這節(jié)課只是學習了部分常用的函數(shù)使用方法和注意事項,大家可以參考 Pandas 開發(fā)文檔,了解 pandas 庫提供的其他的字符串操作函數(shù)(開發(fā)文檔) 。本節(jié)課程的重點如下:

  • Pandas 庫常用的字符串操作函數(shù)的使用和注意事項。

圖片描述