本文最后更新于:2020年7月1日 晚上

六、问题与练习

1.问题

【问题一】 str对象方法和df/Series对象方法有什么区别?

  • str对象方法有很多针对字符串的方法

  • 在replace方法上,二者有较大差异:

    1)str.replace针对object类型或string类型,默认操作:正则表达式

    ​ replace针对任意类型的序列或数据框,正则表达式替换:regex=True。使用字典可以支持 多列替换。

    2)str.replace类型赋值参数不能是pd.NA。

    3)对于string类型Series,使用replace函数不能使用正则表达式替换。

【问题二】 给出一列string类型,如何判断单元格是否是数值型数据?

  • 正则表达式进行匹配。
  • str.isnumeric有一定的局限性。

【问题三】str.split方法的作用是什么?在什么场合下使用?

  • 使用分隔符对每个字符串进行分割并返回列表。
  • 可以使用str方法进行元素选择。

【问题四】在本章的第二到第四节分别介绍了字符串类型的5类操作,请思考这些操作的应用场景?

  • 拆分:
  • 拼接
  • 替换
  • 字符匹配
  • 字符提取

2.练习

【练习一】现有一份关于字符串的数据集,请解决以下问题:

(a)先对字符串编码存储人员信息(在编号后添加ID列),使用如下格式:”xxx(名字):x国人,性别x,生于x年x月x日“

df = pd.read_csv('data/String_data_one.csv',index_col='人员编号', dtype='string')
df['ID'] = df['姓名'].str.cat([': '+df['国籍']+'国人,','性别'+df['性别']+',','生于'+df['出生年']+'年',df['出生月']+'月', df['出生日'] +'日'],na_rep='*')
df['ID'].head()

输出:

image-20200627003713531

(b)将(a)中的人员生日信息部分修改为用中文表示(如一九七四年十月二十三日),其余返回格式不变。

(c)将(b)中的ID列结果拆分为原列表相应的5列,并使用equals检验是否一致。

【练习二】现有一份半虚拟的数据集,第一列包含了新型冠状病毒的一些新闻标题,请解决以下问题:

(a)选出所有关于北京市和上海市新闻标题的所在行。

df = pd.read_csv('data/String_data_two.csv')
df['col1'].str.extract(r'(?P<name_1>北京|上海)').dropna().index

输出:

image-20200626233841173

(b)求col2的均值。

(c)求col3的均值。