2020-005 pandas与numpy中的字符串处理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2020-005 pandas与numpy中的字符串处理相关的知识,希望对你有一定的参考价值。
参考技术A 上次留了一个小问题,不知道大家想清楚了没有?其实 np.apply_along_axis 实现的也是轴上的操作,对轴上的值统一用函数进行处理,然后返回值。
out:
在这一步中,处理的是第一个轴,第一个轴有1个值,剩下的还有一个轴,维度为2,所以处理了两次。
应该记住,每次指定的 axis 都是可能要发生改变的轴,指定的轴有1个值,所以送入函数的有1个值,剩下的维度就是送入的次数。
所以函数每次拿到的是长度为1的一个 list , print 一下也可以看出来。
out:
用下面的例子会看的更容易些。
out:
处理的是第二个轴,每次送入三个值,剩下的维度为2X4,所以送入8次,这8次的每三个值都是依次遍历第一层1,2和最后一层1,2,3,4提取组成的。最后再组成一个2X4的ndarray。
out:
回到之前。
out:
axis=1 时,显然送入函数的就是一个长度为2的 list ,送入了一次。
那么问题就出在处理的次数上。
在 axis=0 的时候,两个字符串是分两次处理的,在第一次返回 ['hello'] 的时候,因为函数只返回一个值,所以numpy从中提取 'hello' 并由此获知返回的数据类型为 <U5 , < 是小端存储的意思, U 表明该字符串为 unicode 字符, 5 表明长度为 5 ,而我们知道numpy中所有的数据类型都是一致的。所以当第二次返回 ['sssimon'] 的时候,numpy也拿到了 'sssimon' 并存储了,但是由于numpy在输出的时候是根据数据类型进行输出的,类型为 <U5 ,所以只输出了5个字符。
而 axis=1 的时候,返回的是列表 ['hello', 'sssimon'] ,numpy自动根据列表里最长的字符串进行类型推断,为 <U7 ,也就不会出现输出时的截断操作。 这就是造成两者差异的原因,其实从给出的 dtype 中也可以看出来一些线索。
pandas和numpy中都有字符串处理的模块,pandas在 pd.Series.str 模块里,而numpy在 np.char 模块里。
pd.Series.str 是直接可以用切片操作的。
out:
str 模块实现了例如 endswith , startswith , len , strip 等基础字符串的常用函数。
当然我比较常用的就是 replace ,里面还可以用正则表达式。
out:
我们可以用内置的 split 完成类似之前的拆分。
out:
拆分后返回的是 list ,dtype为object,我们可以借用 str 的切片操作来提取一下第一个值。
out:
成功了!
当然其实用 apply 函数更简单直观一点。
out:
pandas中字符串处理只在series中可用,而numpy没有这个限制,因为numpy内部存储的全都是同一种类型。
np.char 模块也实现了常用的 lower , strip , replace , decode , encode , add 等函数,其本质上都是对单元素或者多元素调用函数,函数比较少,感觉不如pandas中的字符串处理灵活性大。
字符串处理在数据分析中常用于数据清洗过程,例如在分析转专业数据时,我拿到的pdf识别后的excel并没有那么整洁,会出现下面这种情况。
这种情况看似比较棘手,但是用正则就很容易。
你,学会了吗?
以上是关于2020-005 pandas与numpy中的字符串处理的主要内容,如果未能解决你的问题,请参考以下文章