import pandas as pd
import numpy as np
df_test = pd.DataFrame({'test_value':['a1','aa1','b1','b2','A2','AA2','Aa2',\
'are u ok','u are not ok','uu are okey']})

-1. str.contains(pat, case=True, flags=0, na=False, regex=True )
pat : str类型
字符序列或正则表达式。
case : bool,默认为True
如果为True,区分大小写。
flags : int,默认为0(无标志)
标志传递到re模块,例如re.IGNORECASE。
na : 默认NaN
填写缺失值的值。
regex : bool,默认为True
如果为True,则假定pat是正则表达式。
如果为False,则将pat视为文字字符串。
-2. 正则表达
pattern = '[a-z][0-9]'
a = df_test[df_test['test_value'].str.contains(pattern,na=True)]
pattern2 = '(.*?)are(.*?)'
b = df_test[df_test['test_value'].str.contains(pattern2,na=False)]
[a-z] 表示小写字母a-z
[0-9] 表示数字0-9
(.*?)表示若干元素
-3. startswith, endswith
c = df_test[df_test['test_value'].str.startswith('are',na=False)]
d = df_test[df_test['test_value'].str.endswith('ok',na=False)]
- 4.不包含
用~或 == False
pattern = '[a-z][0-9]'
e = df_test[~df_test['test_value'].str.contains(pattern,na=True)]
f = df_test[(df_test['test_value'].str.contains(pattern,na=True)==False)]

-5. 多个str选择
用 |
g = df_test[df_test['test_value'].str.contains('are|u',na=False)
-6. 字符串合并
s = pd.Series(['a', 'b', 'c', 'd'], dtype="string")
s.str.cat(sep=',')
Out: 'a,b,c,d'
t = pd.Series(['a', 'b', np.nan, 'd'], dtype="string")
t.str.cat(sep=',', na_rep='-')
Out[61]: 'a,b,-,d'
同时可以一个多个series进行合并:
s.str.cat(t,sep='-')
s.str.cat(pd.concat([s,t]),sep='-')
list: '-'.join([///])
-7.字符串分割
s.str.split('-',expand=True)[0]
-8.字符替代
s = s.replace('a','b') # a替换成b
s = s.replace(['\N', 'nan'],[np.nan,np.nan])
s = s.replace(',','、',regex=True) #正则替代
-9.series 前后加字符
'持有'+df_temp['CODE']+','+df_temp['占净值比']
输出:
持有9988 HK EQUITY,占组合净值比X%
持有BABA US EQUITY,占组合净值比X%
网友评论