![2f0393a0fcb85b11355de03d02ace6bf.png](https://i-blog.csdnimg.cn/blog_migrate/9b04763e79eb1475e5c7925afcd643a5.jpeg)
在处理数据的时候,对数值型的数据处理还是比较方便的,但是有时候数值型数据出现问题后就会比较头痛了,因为文本数据的排列组合可是有很多很多的,今天我们就学习一下如何对文本数据进行处理,这样我们接下来在工作中遇到了这些情况就可以少掉一下头发啦。
![d6bd631540ae5adc7303155bc4b9cb85.png](https://i-blog.csdnimg.cn/blog_migrate/1ddc594e3028a00c93dda4b4675ce702.jpeg)
一、str属性
文本数据也就是我们常说的字符串,pandas为series提供了str属性,通过它可以方便对每个元素进行操作。
![6745e03b9537f5557abb6c0a116c4c07.png](https://i-blog.csdnimg.cn/blog_migrate/6b32178e04e8244bfe45d7ef58cfc59e.jpeg)
为了防止数据被弄坏,我们先预留一个备份以防万一。
![ba57e33cd69be5f6919a6a70dc069900.png](https://i-blog.csdnimg.cn/blog_migrate/849efe402f47395a67de1a6e53daf48a.jpeg)
这里我们是不能使用backup_user_info = user_info的因为这样的话一个更改另外一个也会更改。
在之前我们也已经了解过,在对series中每个元素处理时,我们可以使用map或apply方法,比如我们想把星球列下面的地球和外星转换为英文,可以使用下面的方式。
![ef74a725f5adca534b91811afe5bcee7.png](https://i-blog.csdnimg.cn/blog_migrate/6b91d4d68c199f75753152d9005d27e6.jpeg)
这时候我们在将表恢复成原来的样子。
![f3b59a5363a218112529585f9ec76c70.png](https://i-blog.csdnimg.cn/blog_migrate/6288f704f8740790aa2f2c75548d1127.jpeg)
- 将哪个星球列下的星球改为大写的英文后再改为小写
首先更改为英文
![50b5b03abf1fe33377d65a3948c58ab1.png](https://i-blog.csdnimg.cn/blog_migrate/e07dc5106b5608e86ac9de3397b0d9b8.jpeg)
然后设置一个函数,将星球改为大写,原理为upper()方法
![439070f60a92fb0fd4f7c78f5145a508.png](https://i-blog.csdnimg.cn/blog_migrate/316177fc15e52072c560c93d7af81d01.jpeg)
然后在设置为小写,原理为lower方法
![00867bdb1c4aac307a06e8ece7f46d8e.png](https://i-blog.csdnimg.cn/blog_migrate/79aa322fa0d8184aa9516fe3c0c38cc0.jpeg)
- 给英雄们的身高加上一个单位
![759c84a81f3d343533c050b45b0b6d99.png](https://i-blog.csdnimg.cn/blog_migrate/3c8aa362875404f5575438596864930a.jpeg)
我们通过str属性来访问之后用到的方法名与 Python 内置的字符串的方法名一样。并且能够自动排除缺失值。 我们再来试试其他一些方法。例如,统计每个字符串的长度。
![1ef5ccab75b28076181666e8c615e6bb.png](https://i-blog.csdnimg.cn/blog_migrate/658675b9636b3e33082cfc7a975368c6.jpeg)
- 将cm替换成空白的字符串
![401054c7a864ff075d51504e8b81151b.png](https://i-blog.csdnimg.cn/blog_migrate/149b6defb536a51c870b7867d658b481.jpeg)
- 将身高列的元素类型转换为整数型
![335ffc1b7a85123946579d4a1cc6c41a.png](https://i-blog.csdnimg.cn/blog_migrate/0313f937aec5d5712a6d0c695f27d989.jpeg)
- 生成一个新的列,列名为姓名的长度,元素为英雄姓名的长度(len方法)
![9db7a72ded0cb716db93eec73ef7b7e4.png](https://i-blog.csdnimg.cn/blog_migrate/59f816abf6f96f8e495184b45fe056b0.jpeg)
- 查看表的元素类型
![60c6eac27d95ee99b588f29b209e40b2.png](https://i-blog.csdnimg.cn/blog_migrate/573c2cfb179f2b4225644b956bb679e2.jpeg)
- 将年不年轻列的中的中年属性更改为中老年属性
![2a8282b1614c7277ab2d14d9e01f9463.png](https://i-blog.csdnimg.cn/blog_migrate/091076cf40f529b96287aa3909e1f6a2.jpeg)
查看城市列中每个元素有几个字
![1264c815cd0542a7d36db6ff4ba6d521.png](https://i-blog.csdnimg.cn/blog_migrate/aa4a1dfd86006a23c36ce5ea28400c21.jpeg)
- 查看年不年轻列中每个元素是否有轻这个字符串
![006f75a40f8e66b03756a0df47074417.png](https://i-blog.csdnimg.cn/blog_migrate/b346168c93fa2fb008750a7fa364b860.jpeg)
二、替换和分隔
使用.srt属性也支持替换与分割操作。先来看下替换操作,例如:将大写的R转换为小写的r。
![b20594f6b59eccc66edf7d91057687e7.png](https://i-blog.csdnimg.cn/blog_migrate/2e0b5c2fc18f92580c2120fda6866a46.jpeg)
- 将列中的数据进行分隔
![fe10ba58be3c1c2f2bb2aed254d782d0.png](https://i-blog.csdnimg.cn/blog_migrate/145e64e59324e850d0242ba68d1fe478.jpeg)
将是否年轻按年进行分隔,结果如上所述。
分割列表中的元素可以使用 get 或 [] 符号进行访问:
![19f5bb6c2c6b31a4443d807530ea7b4a.png](https://i-blog.csdnimg.cn/blog_migrate/fd09cdc770edc6e4a83cfcc095fcbff5.jpeg)
比如说电影的主演有很多人, 可能是用逗号, 或者/ 进行分割, 这是可以用这种方法转换成列表
- 在表中添加一列英雄的爱人列
![3cf0f3bdd9ec5d85543176863542c034.png](https://i-blog.csdnimg.cn/blog_migrate/a8927f87408886e63716d050e421bb5f.jpeg)
![d37b4f554921e38f11e80050b9cd61d6.png](https://i-blog.csdnimg.cn/blog_migrate/998e051e6ccb26cdc99e3692a2ca83d9.jpeg)
将爱人列以,号分隔
![11330ea22e91097123b1c4cafa9a30dc.png](https://i-blog.csdnimg.cn/blog_migrate/ad72f6b4054635d39f65dbff47d1acf0.jpeg)
这时候就可以让某一行的这个元素以列表表现出来。
![edf1dfef1f560778c626940d1b2c2e53.png](https://i-blog.csdnimg.cn/blog_migrate/82ba9433eee026524375be56e7c1989c.jpeg)
将索引列改为英雄姓名,并查看蜘蛛侠和灭霸的爱人
![7564f3c246ff8e7ccbabe110a0ecd29e.png](https://i-blog.csdnimg.cn/blog_migrate/ef5776d3e02dcb4170eb9d97b0de1300.jpeg)
三、提取子串
既然是在操作字符串,很自然的大家可能会想到是否可以从一个长的字符串中提取出子串。答案是可以的。
1、提取第一个匹配的子串
extract方法接受一个正则表达式并至少包含一个捕获组,指定参数 expand=True可以保证每次都返回DataFrame。例如,现在想要匹配空字符串前面的所有的字母,可以使用如下操作:
- 查看哪位英雄的所在的星球包括E这个字符串
![5e9d5f78c0445b021835d6cf8e90442d.png](https://i-blog.csdnimg.cn/blog_migrate/5d55b8442ee82e8304e2d22451df4089.jpeg)
- 查看哪位英雄所在的城市包括纽这个字符串
![dae950b0041d92a9896f597a8017256d.png](https://i-blog.csdnimg.cn/blog_migrate/75075f4e3bfb87a5e0f929fa25dff884.jpeg)
四、生成哑变量
首先我们先了解一下什么是哑变量:
哑变量原名为虚拟变量 ( Dummy Variables) 又称虚设变量、名义变量或哑,用以反映质的属性的一个人工变量,是量化了的自变量,通常取值为0或1。引入哑变量可使线形回归模型变得更复杂,但对问题描述更简明,一个方程能达到两个方程的作用,而且接近现实。
在pandas中我们可以通过get_dummies 方法可以将字符串转为哑变量,sep 参数是指定哑变量之间的分隔符。
![abad364dc2ba52e61f9fc9c571eb4932.png](https://i-blog.csdnimg.cn/blog_migrate/275480123a92c8347720c9c867963713.jpeg)
- 对英雄姓名进行哑变量转换
![392e5d24bc47e42d55673cc00cc9393c.png](https://i-blog.csdnimg.cn/blog_migrate/52c74f5d7049ce5b1ce029bb046e9b92.jpeg)
从结果可以看出,第0行的英雄姓名是蜘蛛侠,第1行的英雄姓名是灭霸,哑变量转换就是将每一个选择匹配哪一行的数据。
- 对那个星球进行哑变量转换
![806b2314b72e655803ec43f5a495dcee.png](https://i-blog.csdnimg.cn/blog_migrate/3a36db46aec9479e9dc49bdf31f79958.jpeg)
从结果可以看出,在地球的英雄是第0、2、3、4、6行的,对应的英雄名称为(蜘蛛侠、奇异博士、钢铁侠、蝙蝠侠、黑寡妇)