文本数据
一、string类型的性质
1. string与object的区别
(1)字符存取方法会返回相应数据的Nullable类型,而object会岁缺失值的存在而改变返回类型
(2) 某些Series方法不能用在string上,例如:Series.str.decode(),存储的是字符串而不是字节
(3)string类型在缺失值存储或运算时,类型会广播为pd.NA,而不是浮点型np.nan
2. string类型的转换
如果将一个其他类型的容器直接转换string类型可能会出错。当下正确的方法是分两部转换,先转为str型object,再转为string类型。str是将该对象转换成字符串类型,string是该对象原本就是字符串。
pd.Series([1,'1.']).astype('str').astype('string')
pd.Series([1,2]).astype('str').astype('string')
pd.Series([True,False]).astype('str').astype('string')
上述代码分别是将object型、int型、bool型分两步转换为string类型。直接转会报错。
二、 拆分与拼接
1. str.split方法
(a) 分隔符与str的位置元素选取
s = pd.Series(['a_b_c', 'c_d_e', np.nan, 'f_g_h'], dtype="string")
s.str.split('_')
结果:
0 [a, b, c]
1 [c, d, e]
2
3 [f, g, h]
dtype: object
对于str方法可以进行元素的选择,如果该单元格元素是列表,那么str[i]表示取出第i个元素,如果是单个元素,则先把元素转为列表在取出
s.str.split('_').str[1]
pd.Series(['a_b_c', ['a','b','c']], dtype="object").str[1]
(b)其他参数
expand参数控制了是否将列拆开,n参数代表最多分割多少次
s.str.split('_',expand=True)
s.str.split('_',n=1)
0 [a, b_c]
1 [c, d_e]
2
3 [f, g_h]
dtype: object
s.str.split('_',expand=True,n=1)