Pandas文本数据

一、String 类型的性质
1、string与object的区别

string类型和object不同之处有三:
① 字符存取方法(string accessor methods,如str.count)会返回相应数据的Nullable类型,而object会随缺失值的存在而改变返回类型
② 某些Series方法不能在string上使用,例如: Series.str.decode(),因为存储的是字符串而不是字节
③ string类型在缺失值存储或运算时,类型会广播为pd.NA,而不是浮点型np.nan,其余全部内容在当前版本下完全一致,但迎合Pandas的发展模式,我们仍然全部用string来操作字符串
2. string类型的转换

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

pd.Series([1,‘1.’]).astype(‘string’) #报错
pd.Series([1,2]).astype(‘string’) #报错
pd.Series([True,False]).astype(‘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’)#成功

二、拆分与拼接
1、str.split 方法

Series.str.split(self, pat=None, n=-1, expand=False)

pat 分隔符或者正则表达式,默认为空格
n 表示最多分割几次
expand 表示分割后是否将列展开

2、str.cat 方法

Series.str.cat(self, others=None, sep=None, na_rep=None, join=‘left’)

sep 表示连接之后的数据的分隔符,默认为""
na_rep 表示缺失值的替代字符,默认为None,也就是不替代
join 表示连接方式,默认为左连接

三、替换

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

Series.str.replace(self, pat, repl, n=-1, case=None, flags=0, regex=True)

pat 要被替换的字符串或者以正则表达式的形式给出
repl 要替换的字符串
n 表示要替换的数量,默认全替换。

四、子串匹配与提取
1、str.extract 方法

Series.str.extract(self, pat, flags=0, expand=True)

pat 表示要提取的模式,使用正则表达式获取
expand 和前面说到的一样,要不要提取后是否要分开

五、常用字符串的方法
1、过滤型方法

str.strip() 常用于过滤空格
str.lower() 用于转换为小写字符
str.upper() 用于转换为大写字符
str.swapcase() 用于交换字符串中的大小写,小写的字符变成大写,大写的字符变成小写
str.capitalize() 用于大写首字母,其他的字母变成小写

2、isnumeric 方法

检查字符串中的每一位是否都是数字

练习一
现有一份关于字符串的数据集String_data_one.csv,请解决以下问题:
(a)现对字符串编码存储人员信息(在编号后添加ID列),使用如下格式:“×××(名字):×国人,性别×,生于×年×月×日”
(b)将(a)中的人员生日信息部分修改为用中文表示(如一九七四年十月二十三日),其余返回格式不变。
(c)将(b)中的ID列结果拆分为原列表相应的5列,并使用equals检验是否一致。

ex1 = pd.read_csv('work/String_data_one.csv',index_col='人员编号').astype('str')
print('(a)现对字符串编码存储人员信息(在编号后添加ID列),使用如下格式:“×××(名字):×国人,性别×,生于×年×月×日”')
ex1['ID'] =ex1['姓名']+':'+ex1['国籍']+'国人,性别'+ex1['性别']+',生于'+ex1['出生年']+'年'+ex1['出生月']+'月'+ex1['出生日']+'日'
print(ex1['ID'])
print('(b)将(a)中的人员生日信息部分修改为用中文表示(如一九七四年十月二十三日),其余返回格式不变')
ex1['ID2'] =ex1['姓名']+':'+ex1['国籍']+'国人,性别'+ex1['性别']+',生于'+ex1['出生年'].str.replace('0','零').str.replace('1','一').str.replace('2','二').str.replace('3','三').str.replace('4','四').str.replace('5','五').str.replace('6','六').str.replace('7','七').str.replace('8','八').str.replace('9','九')+'年'+ex1['出生月'].str.replace('0','零').str.replace('1','一').str.replace('2','二').str.replace('3','三').str.replace('4','四').str.replace('5','五').str.replace('6','六').str.replace('7','七').str.replace('8','八').str.replace('9','九')+'月'+ex1['出生日'].str.replace('0','零').str.replace('1','一').str.replace('2','二').str.replace('3','三').str.replace('4','四').str.replace('5','五').str.replace('6','六').str.replace('7','七').str.replace('8','八').str.replace('9','九')+'日'
print(ex1['ID2'])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值