知知知…
1.string类型的性质
string与object的区别
① 字符存取方法(string accessor methods,如str.count)会返回相应数据的Nullable类型,而object会随缺失值的存在而改变返回类型
② 某些Series方法不能在string上使用,例如: Series.str.decode(),因为存储的是字符串而不是字节
③ string类型在缺失值存储或运算时,类型会广播为pd.NA,而不是浮点型np.nan
string类型创建与转换
①在创建Series时,指定类型为string
s = pd.Series(list('abc'),dtype='string')
print(s)
'''
0 a
1 b
2 c
dtype: string
'''
②通过astype(‘string’)转为字符串类型
s = pd.Series(list('abc')).astype('string')
print(s)
'''
0 a
1 b
2 c
dtype: string
'''
2.拆分与拼接
拆分
① str.split方法
在调用时,是使用 Series.str.split() 因为 str 是 Series 的一个内置的类?,这些对string 操作的方法,大多数由str提供的
Series.str.split([pat, n, expand]),第一个参数pat是指分割标准,可以不填,即默认以空格风格,也可以字符(某个元素)的形式给出,第二个参数 n代表最多分割多少次,第三个参数expand表示是否拆开的数据按列来显示
注:使用split函数得到对象类型是object,因为现在Series中的元素已经不是string,而包含了list,且string类型只能含有字符串
拼接
② str.cat方法
1)对于单个Series而言,就是指所有的元素进行字符合并为一个字符串,其中可选sep分隔符参数,和缺失值替代字符na_rep参数
2)对于两个Series合并而言,是对应索引的元素进行合并
3)多列拼接可以分为表的拼接和多Series拼接
注:如果两边合并的索引不相同且未指定join参数,默认为左连接,设置join=‘left’
3.常用字符串方法
① 过滤型方法
1)str.strip 常用于过滤空格
2)str.lower和str.upper 常用于大小写转换
3)str.swapcase和str.capitalize 分别表示交换字母大小写和大写首字母
② isnumeric方法 用于检查每一位是否都是数字
题题题…
【问题一】 str对象方法和df/Series对象方法有什么区别?
首先, str 其实是 df/Series 内置的类之一,它跟 df/Series并不是 平行关系
其次,str 对象的类型是 string 字符串类型,df/Series 的类型可以是 int 整型,folat 浮点型,object型,还有时间序列等;如果想对这些类型使用的话,必须要先使用astype(‘string’)转化,且 df 整个工作表转换时要用
最后,str 对象内置了很多常用的方法 比如 cat拼接、split拆分、replace替换
【问题二】 给出一列string类型,如何判断单元格是否是数值型数据?
s = pd.Series([1, 'b', None, 2, 'cb']).astype('string')
print(s)
'''
0 1
1 b
2 <NA>
3 2
4 cb
dtype: string
'''
print(s.str.isnumeric())
'''
0 True
1 False
2 <NA>
3 True
4 False
dtype: boolean
'''
【问题三】 rsplit方法的作用是什么?它在什么场合下适用?
rsplit(和split用法一致,只不过默认是从右往左分隔,有点逆序分割的味道),在列数比较多且仅需要多后几列进行操作时,可用 rsplit 方法
【问题四】 在本章的第二到第四节分别介绍了字符串类型的5类操作,请思考它们各自应用于什么场景?
唔好意思,正则表达式泥滴野矛学过唔
2.练习
【练习一】 现有一份关于字符串的数据集,请解决以下问题:
df = pd.read_csv(r'C:\\Users\YANG\Desktop\joyful-pandas-master\data\/String_data_one.csv', index_col='人员编号')
print(df.head())
'''
姓名 国籍 性别 出生年 出生月 出生日
人员编号
1 aesfd 2 男 1942 8 10
2 fasefa 5 女 1985 10 4
3 aeagd 4 女 1946 10 15
4 aef 4 男 1999 5 13
5 eaf 1 女 2010 6 24
'''
(a)现对字符串编码存储人员信息(在编号后添加ID列),使用如下格式:“×××(名字):×国人,性别×,生于×年×月×日”
df = pd.read_csv(r'C:\\Users\YANG\Desktop\joyful-pandas-master\data\/String_data_one.csv', index_col='人员编号')
print(df.head(), type(df))
df['ID'] = df['姓名']
df['ID'] = df['ID'].str.cat([':'+df['国籍'].astype('string')+'国人,性别'+df['性别']+',生于'+df['出生年'].\
astype('string')+'年'+df['出生月'].astype('string')+'月'+df['出生日'].\
astype('string')+'日'])
df.insert(0, 'ID', df.pop('ID'))
print(df.head())
'''
ID 姓名 国籍 性别 出生年 出生月 出生日
人员编号
1 aesfd:2国人,性别男,生于1942年8月10日 aesfd 2 男 1942 8 10
2 fasefa:5国人,性别女,生于1985年10月4日 fasefa 5 女 1985 10 4
3 aeagd:4国人,性别女,生于1946年10月15日 aeagd 4 女 1946 10 15
4 aef:4国人,性别男,生于1999年5月13日 aef 4 男 1999 5 13
5 eaf:1国人,性别女,生于2010年6月24日 eaf 1 女 2010 6 24
'''