知知知…

python 区分str里内容的数据类型_string类

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