目錄
在pandas中針對字符串配備了一套方法,使其容易對數組的每個元素進行操作。
1.字符串調用屬性:str
# 通過str屬性操作,會自動排除丟失NaN值
import numpy as np
import pandas as pd
s = pd.Series(['ace','bbb','hello','100',np.nan,'black'])
df = pd.DataFrame({'key1':list('abcdef'),
'key2':['h1','haha',np.nan,'name','ww','a1']
})
print(s)
print(df)
print('-' * 50)
print(s.str.count('b')) # 統計每個字符串中含有b字母的數量
print(df['key1'].str.upper()) # 將字符串轉化為大寫
print('-' * 50)
# 字符串索引
print('-------str[0]字符串索引結果-------')
print(df['key2'].str[0]) # 取第一個字符
print('-------str[:2]字符串索引結果-------')
print(df['key2'].str[:2]) # 取前2個字符
print('-' * 50)
# df.columns可以直接使用str屬性,並且df.columns返回的對象可以直接使用list或者tolist()轉化為字典.
df.columns = df.columns.str.upper()
print(df)
輸出結果:
2.字符串常用方法:lower,upper,len,startswith,endswith
- lower:字母轉化為小寫
- upper:字母轉化為大寫
- len:求每個字符串的長度
- startswith:判斷起始是否為某個指定字母
- endswith:判斷結束是否為某個指定字母
import pandas as pd
s = pd.Series(['A','bd','110',np.nan,'123','hello','wd'])
print(s.str.lower(),'------全部小寫\n')
print(s.str.upper(),'------全部大寫\n')
print(s.str.len(),'------求每個字符串的長度\n')
print(s.str.startswith('h'),'------判斷起始是否為h\n')
print(s.str.endswith('d'),'------判斷結束是否為d\n')
3.字符串去空格:strip,rstrip,lstrip
- strip:去除字符串兩邊的空格
- rstrip:去除字符串左邊的空格
- lstrip:去除字符串右邊的空格
import pandas as pd
s = pd.Series(['Jac k ','Lucy ',' mm '])
df = pd.DataFrame(np.random.randn(3,2),columns=[' column A ',' columnB '],
index=range(3))
print(s)
print(df)
print('--------------------')
print(s.str.strip(),"------strip()的案例結果\n") # 去除字符串兩邊的空格
print(s.str.lstrip(),"-----lstrip()的案例結果\n") # 去除字符串左邊的空格
print(s.str.rstrip(),"-----rstrip()的案例結果\n") # 去除字符串右邊的空格
print('--------------------')
df.columns = df.columns.str.strip() # 去掉列名兩邊的空格,中間的空格沒去掉
print(df)
輸出結果:
4.替換:replace
# 替換replace
import pandas as pd
df = pd.DataFrame(np.random.randn(3, 2), columns=[' Column A ', ' Column B '],
index=range(3))
df.columns = df.columns.str.replace(' ','-')
print(df)
# 替換
df.columns = df.columns.str.replace('-','***',n=1) # n:替換個數
print(df)
輸出結果:
5.字符串分割:split,rspilt
- split:根據指定的分隔符對字符串進行分割
- rsplit:類似於split,反向工作,即從字符串的末尾到字符串的開頭
import pandas as pd
s = pd.Series([['a','b','c'],'1,2,3,4,5',np.nan,'a1,a2,a3,a4,a5'])
print(s)
print(s.str.split(',')) # 分割
print('-' * 50 )
# 獲取分割后的第一個list
print(s.str.split(',')[0])
print('-' * 50 )
#使用get或[]符號訪問拆分列表中的元素
print(s.str.split(',').str[0])
print('------------str.get(0)的測試結果--------------')
print(s.str.split(',').str.get(0))
print('------------expand=True的測試結果-------------' )
print(s.str.split(',',expand=True))
print('------------expand=True & n=3 的測試結果-------------' )
print(s.str.split(',',expand=True,n=3)) # n參數限制分割數,n=3表示對前3列分割,后面的全部作為一列
print('------------rsplit 的測試結果-------------' )
print(s.str.rsplit(',',expand=True,n=3)) # rsplit類似於split,反向工作,即從字符串的末尾到字符串的開頭
# DataFrame使用字符分割
df = pd.DataFrame({'key1':['a*b*c','1*2*3'],
'key2':['1,2,3','acb']})
print(df)
print('----------DataFrame使用split結果----------')
# 對key2列使用split
print(df['key1'].str.split('*'))