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中的字符串处理的主要内容,如果未能解决你的问题,请参考以下文章

pandas -- numpy++

pandas -- numpy++

为啥使用numpy和pandas来进行数据处理?

python自带及pandas、numpy数据结构(一)

如何切片 numpy 字符串数组的每个元素?

pandas numpy处理缺失值,none与nan比较