pandas 对字符串处理

2020-04-13  本文已影响0人  黄yy家的jby
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']})
df_test.png

-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
(.*?)表示若干元素


df_test2.PNG

-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)]
df_test3.PNG

- 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)]
df_test.png

-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%

上一篇下一篇

猜你喜欢

热点阅读