![13825820-5fd4d667d2d7603f.jpg](https://i-blog.csdnimg.cn/blog_migrate/11d9952c4453edf3bdce6084a650af49.jpeg)
在处理数据的时候,对数值型的数据处理还是比较方便的,但是有时候数值型数据出现问题后就会比较头痛了,因为文本数据的排列组合可是有很多很多的,今天我们就学习一下如何对文本数据进行处理,这样我们接下来在工作中遇到了这些情况就可以少掉一下头发啦。
![13825820-b528bbdee1db1bff.jpg](https://i-blog.csdnimg.cn/blog_migrate/ce286c4d0a67690372f3696f4785a299.jpeg)
一、str属性
文本数据也就是我们常说的字符串,pandas为series提供了str属性,通过它可以方便对每个元素进行操作。
![13825820-70cb7d35e9a74ed5.jpg](https://i-blog.csdnimg.cn/blog_migrate/9a509a935340a881434e75ddc0b8a714.jpeg)
为了防止数据被弄坏,我们先预留一个备份以防万一。
![13825820-bb551997385cfe86.jpg](https://i-blog.csdnimg.cn/blog_migrate/3d8a5bf146b2d6b7a342dcc88a385d00.jpeg)
这里我们是不能使用backup_user_info = user_info的因为这样的话一个更改另外一个也会更改。
在之前我们也已经了解过,在对series中每个元素处理时,我们可以使用map或apply方法,比如我们想把星球列下面的地球和外星转换为英文,可以使用下面的方式。
![13825820-39ee11094df4cc53.jpg](https://i-blog.csdnimg.cn/blog_migrate/2ee1563b9e2187877a7f46c3d07413cf.jpeg)
这时候我们在将表恢复成原来的样子。
![13825820-76202cd91b00a970.jpg](https://i-blog.csdnimg.cn/blog_migrate/510b636fd2718b583569e616c2993f73.jpeg)
- 将哪个星球列下的星球改为大写的英文后再改为小写
首先更改为英文
![13825820-942b07a085c8a73f.jpg](https://i-blog.csdnimg.cn/blog_migrate/6c2b3061b472df522e1d88ee590822c4.jpeg)
然后设置一个函数,将星球改为大写,原理为upper()方法
![13825820-6d7347072ca6d5ff.jpg](https://i-blog.csdnimg.cn/blog_migrate/f13583b40d817c4a94e33c782e76e06d.jpeg)
然后在设置为小写,原理为lower方法
![13825820-24a0bb14c948e0b9.jpg](https://i-blog.csdnimg.cn/blog_migrate/20bbde4d4979997fc6fb8f6460d74800.jpeg)
- 给英雄们的身高加上一个单位
![13825820-0b4bf73e7ddb8064.jpg](https://i-blog.csdnimg.cn/blog_migrate/f8e0f573ea0d30f467584c86c61ab70c.jpeg)
我们通过str属性来访问之后用到的方法名与 Python 内置的字符串的方法名一样。并且能够自动排除缺失值。 我们再来试试其他一些方法。例如,统计每个字符串的长度。
![13825820-700b61fb33c749b7.jpg](https://i-blog.csdnimg.cn/blog_migrate/13736304c1575ea848c0febf600a75ee.jpeg)
- 将cm替换成空白的字符串
![13825820-078d02ca577ba9bd.jpg](https://i-blog.csdnimg.cn/blog_migrate/c10f97629d915c09feec7eedba86e9a3.jpeg)
- 将身高列的元素类型转换为整数型
![13825820-7fcf239e3afe0646.jpg](https://i-blog.csdnimg.cn/blog_migrate/a2c85b51278b43b366f0458f7e74709d.jpeg)
- 生成一个新的列,列名为姓名的长度,元素为英雄姓名的长度(len方法)
![13825820-74d55f56dc24a1b7.jpg](https://i-blog.csdnimg.cn/blog_migrate/eaba7f5efb08a70800f4b0d57fad58b1.jpeg)
- 查看表的元素类型
![13825820-9deebd451fb87681.jpg](https://i-blog.csdnimg.cn/blog_migrate/7f54ace7cd35739ea3f9d34f9ffda311.jpeg)
- 将年不年轻列的中的中年属性更改为中老年属性
![13825820-75d036e195dbfed8.jpg](https://i-blog.csdnimg.cn/blog_migrate/64de663a2a07475a6e834539bd1f0ea7.jpeg)
查看城市列中每个元素有几个字
![13825820-285d7207d0f7032b.jpg](https://i-blog.csdnimg.cn/blog_migrate/ec172c8e6f5e3401d3ec1835b1e5947b.jpeg)
- 查看年不年轻列中每个元素是否有轻这个字符串
![13825820-978ab68e0a4bdbba.jpg](https://i-blog.csdnimg.cn/blog_migrate/a0692d5c3ad55f98b3da505cbcfb4d60.jpeg)
二、替换和分隔
使用.srt属性也支持替换与分割操作。先来看下替换操作,例如:将大写的R转换为小写的r。
![13825820-d0c8349a3cae5ad2.jpg](https://i-blog.csdnimg.cn/blog_migrate/1adfcb211b642a5c1ac27ce0d00ddf1c.jpeg)
- 将列中的数据进行分隔
![13825820-90326821d3cddfd2.jpg](https://i-blog.csdnimg.cn/blog_migrate/129fcb700f4d256462a1aba1ee93d927.jpeg)
将是否年轻按年进行分隔,结果如上所述。
分割列表中的元素可以使用 get 或 [] 符号进行访问:
![13825820-5e510dd2f0ce3b60.jpg](https://i-blog.csdnimg.cn/blog_migrate/b2bad5b5eb4415eb4819f343b01c06d9.jpeg)
比如说电影的主演有很多人, 可能是用逗号, 或者/ 进行分割, 这是可以用这种方法转换成列表
- 在表中添加一列英雄的爱人列
![13825820-f72c7d3069f4be29.jpg](https://i-blog.csdnimg.cn/blog_migrate/f42f62cfe61bf67e4ae383e404c0a1e1.jpeg)
![13825820-400dd162471b458e.jpg](https://i-blog.csdnimg.cn/blog_migrate/c7847bcd0f941264e502faa48f04b923.jpeg)
将爱人列以,号分隔
![13825820-f1470215cbdc8d33.jpg](https://i-blog.csdnimg.cn/blog_migrate/e7ec8af906ee7d7d0eb235fa69f15c49.jpeg)
这时候就可以让某一行的这个元素以列表表现出来。
![13825820-43487f50e91cbe77.jpg](https://i-blog.csdnimg.cn/blog_migrate/6150d0e47f564206f2ac05f93273e1c0.jpeg)
将索引列改为英雄姓名,并查看蜘蛛侠和灭霸的爱人
![13825820-05f98802f9e3d509.jpg](https://i-blog.csdnimg.cn/blog_migrate/4e9b0a1aefc7e186b234f00cbe5965f2.jpeg)
三、提取子串
既然是在操作字符串,很自然的大家可能会想到是否可以从一个长的字符串中提取出子串。答案是可以的。
1、提取第一个匹配的子串
extract方法接受一个正则表达式并至少包含一个捕获组,指定参数 expand=True可以保证每次都返回DataFrame。例如,现在想要匹配空字符串前面的所有的字母,可以使用如下操作:
- 查看哪位英雄的所在的星球包括E这个字符串
![13825820-620bb1ab01f11949.jpg](https://i-blog.csdnimg.cn/blog_migrate/d1c01fd4452535fb0146d0aee26d94f1.jpeg)
- 查看哪位英雄所在的城市包括纽这个字符串
![13825820-fd7baf176d236df9.jpg](https://i-blog.csdnimg.cn/blog_migrate/b26694c5d5bcf85099572095f2d72379.jpeg)
四、生成哑变量
首先我们先了解一下什么是哑变量:
哑变量原名为虚拟变量 ( Dummy Variables) 又称虚设变量、名义变量或哑,用以反映质的属性的一个人工变量,是量化了的自变量,通常取值为0或1。引入哑变量可使线形回归模型变得更复杂,但对问题描述更简明,一个方程能达到两个方程的作用,而且接近现实。
在pandas中我们可以通过get_dummies 方法可以将字符串转为哑变量,sep 参数是指定哑变量之间的分隔符。
![13825820-f6c0bce538d0bc5c.jpg](https://i-blog.csdnimg.cn/blog_migrate/082d61375265eec578a1f14af4a34cc2.jpeg)
- 对英雄姓名进行哑变量转换
![13825820-7141e5f5b56a3d97.jpg](https://i-blog.csdnimg.cn/blog_migrate/171cd5a5477b4933d36ec2061aa1c1a6.jpeg)
从结果可以看出,第0行的英雄姓名是蜘蛛侠,第1行的英雄姓名是灭霸,哑变量转换就是将每一个选择匹配哪一行的数据。
- 对那个星球进行哑变量转换
![13825820-d069b72d32d089b4.jpg](https://i-blog.csdnimg.cn/blog_migrate/7b5c1a19de2428a34533286872208428.jpeg)
从结果可以看出,在地球的英雄是第0、2、3、4、6行的,对应的英雄名称为(蜘蛛侠、奇异博士、钢铁侠、蝙蝠侠、黑寡妇)