pandas学习笔记(七)

一.string类型的性质

1.string与object的区别

string类型和object不同之处有三:
① 字符存取方法(string accessor methods,如str.count)会返回相应数据的Nullable类型,而object会随缺失值的存在而改变返回类型
② 某些Series方法不能在string上使用,例如: Series.str.decode(),因为存储的是字符串而不是字节
③ string类型在缺失值存储或运算时,类型会广播为pd.NA,而不是浮点型np.nan

2.string类型的转换

如果将一个其他类型的容器直接转换string类型可能会出错

#pd.Series([1,'1.']).astype('string') #报错
#pd.Series([1,2]).astype('string') #报错
#pd.Series([True,False]).astype('string') #报错

当下正确的方法是分两部转换,先转为str型object,在转为string类型

pd.Series([1,'1.']).astype('str').astype('string')
0     1
1    1.
dtype: string

pd.Series([1,2]).astype('str').astype('string')
0    1
1    2
dtype: string

pd.Series([True,False]).astype('str').astype('string')
0     True
1    False
dtype: string

二.拆分与拼接

1. str.split方法

(a)分割符与str的位置元素选取
s = pd.Series(['a_b_c', 'c_d_e', np.nan, 'f_g_h'], dtype="string")
s

0    a_b_c
1    c_d_e
2     <NA>
3    f_g_h
dtype: string

s.str.split('_')

0    [a, b, c]
1    [c, d, e]
2         <NA>
3    [f, g, h]
dtype: object

这里需要注意split后的类型是object,因为现在Series中的元素已经不是string,而包含了list,且string类型只能含有字符串.

(b)其他参数

expand参数控制了是否将列拆开,n参数代表最多分割多少次

s.str.split('_',expand=True)
0	1	2
0	a	b	c
1	c	d	e
2	<NA>	<NA>	<NA>
3	f	g	h

s.str.split('_',n=1)
0	1
0	a	b_c
1	c	d_e
2	<NA>	<NA>
3	f	g_h

2.str.cat方法

(a)不同对象的拼接模式

① 对于单个Series而言,就是指所有的元素进行字符合并为一个字符串

s = pd.Series(['ab',None,'d'],dtype='string')
s
0      ab
1    <NA>
2       d
dtype: string

s.str.cat()
'abd'

其中可选sep分隔符参数,和缺失值替代字符na_rep参数

s.str.cat(sep=',')
'ab,d'
s.str.cat(sep=',',na_rep='*')
'ab,*,d'

② 对于两个Series合并而言,是对应索引的元素进行合并

s2 = pd.Series(['24',None,None],dtype='string')
s2
0      24
1    <NA>
2    <NA>
dtype: string

s.str.cat(s2)
0    ab24
1    <NA>
2    <NA>
dtype: string

同样也有相应参数,需要注意的是两个缺失值会被同时替换

s.str.cat(s2,sep=',',na_rep='*')
0    ab,24
1      *,*
2      d,*
dtype: string

③ 多列拼接可以分为表的拼接和多Series拼接
表的拼接

s.str.cat(pd.DataFrame({0:['1','3','5'],1:['5','b',None]},dtype='string'),na_rep='*')
0    ab15
1     *3b
2     d5*
dtype: string

(b)cat中的索引对其

如果两边合并的索引不相同且未指定join参数,默认为左连接,设置join=‘left’

三.替换

广义上的替换,就是指str.replace函数的应用,fillna是针对缺失值的替换

1. str.replace的常见用法

s = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca','', np.nan, 'CABA', 'dog', 'cat'],dtype="string")
s
0       A
1       B
2       C
3    Aaba
4    Baca
5        
6    <NA>
7    CABA
8     dog
9     cat
dtype: string

s.str.replace(r'^[AB]','***')
0       ***
1       ***
2         C
3    ***aba
4    ***aca
5          
6      <NA>
7      CABA
8       dog
9       cat
dtype: string

2.子组与函数替换

s.str.replace(r'([ABC])(\w+)',lambda x:x.group(2)[1:]+'*')
0       A
1       B
2       C
3     ba*
4     ca*
5        
6    <NA>
7     BA*
8     dog
9     cat
dtype: string

四.子串匹配与提取

1. str.extract方法

(a)常见用法
pd.Series(['10-87', '10-88', '10-89'],dtype="string").str.extract(r'([\d]{2})-([\d]{2})')#没看懂

	0	1
0	10	87
1	10	88
2	10	89

五.常用字符串方法

1.过滤型方法

(a)str.strip

常用于过滤空格

pd.Series(list('abc'),index=[' space1  ','space2  ','  space3'],dtype="string").index.str.strip()

Index(['space1', 'space2', 'space3'], dtype='object')
(b)str.lower和str.upper
pd.Series('A',dtype="string").str.lower()
0    a
dtype: string
pd.Series('a',dtype="string").str.upper()
0    A
dtype: string
©str.swapcase和str.capitalize

分别表示交换字母大小写和大写首字母

pd.Series('abCD',dtype="string").str.swapcase()
0    ABcd
dtype: string

pd.Series('abCD',dtype="string").str.capitalize()
0    Abcd
dtype: string

2. isnumeric方法

pd.Series(['1.2','1','-0.3','a',np.nan],dtype="string").str.isnumeric()

0    False
1     True
2    False
3    False
4     <NA>
dtype: boolean

你可能感兴趣的:(matlab,深度学习,python)