最牛的设计网站建设品牌运营策划

当前位置: 首页 > news >正文

最牛的设计网站建设,品牌运营策划,杭州网站推广¥做下拉去118cr,肇庆建设局网站文章目录一、处理字符串1. 向量化字符串操作简介2. str 方法的简介二、apply() 函数详解三、applymap() 函数详解四、map() 函数详解一、处理字符串 当我们遇到一个超级大的 DataFrame#xff0c;里面有一列类型为字符串#xff0c;要将每一行的字符串都用同一方式进行处理里面有一列类型为字符串要将每一行的字符串都用同一方式进行处理 一般会想到遍历整合 DataFrame。但是如果直接这样做的话将会耗费很长时间有时几个小时都处理不完。 因此我们将学习 pandas 快速处理字符串方法。

  1. 向量化字符串操作简介 量化操作简化了纯数值的数组操作语法我们不需要再担心数组的长度或维度只需要把中心放在操作上面。而对字符串的向量化需要工具包的支持如 Numpy 就没办法直接对字符串进行向量化操作只能通过繁琐的循环来实现。 Pandas 则可以很好的处理这类问题。

  2. str 方法的简介 Python 会处理字符串起来会很容易作为工具包的 Pandas 同样可以简单快速的处理字符串几乎把 Python 内置的字符串方法都给复制过来了这种方法就是 Pandas 内置的 str 方法。通俗来说就可以将 series 和 index 对象中包含字符串的部分简单看作单个字符串处理达到批量简单快速处理的目的str 方法有如下函数可供我们使用。 函数含义lower()将的字符串转换为小写upper()将的字符串转换为大写len()得出字符串的长度strip()去除字符串两边的空格包含换行符split()用指定的分割符分割字符串cat(sep“”)用给定的分隔符连接字符串元素contains(pattern)如果子字符串包含在元素中则为每个元素返回一个布尔值 True否则为 Falsereplace(a,b)将值 a 替换为值 bcount(pattern)返回每个字符串元素出现的次数startswith(pattern)如果 Series 中的元素以指定的字符串开头则返回 Trueendswith(pattern)如果 Series 中的元素以指定的字符串结尾则返回 Truefindall(pattern)以列表的形式返出现的字符串find(pattern)返回字符串第一次出现的索引位置 这里需要注意的是上述所有字符串函数全部适用于 DataFrame 对象同时也可以与 Python 内置的字符串函数一起使用这些函数在处理 Series/DataFrame 对象的时候会自动忽略缺失值数据NaN。首先我们导入需要的 numpy 和 pandas 库。 import pandas as pd import numpy as np1 lower() 函数可以将的字符串转换为小写。 s pd.Series([C, Python, java, go, np.nan, 1125,javascript]) s.str.lower() 0 c 1 python 2 java 3 go 4 NaN 5 1125 6 javascript dtype: object2 upper() 将的字符串转换为大写。 s pd.Series([C, Python, java, go, np.nan, 1125,javascript]) s.str.upper() #0 C #1 PYTHON #2 JAVA #3 GO #4 NaN #5 1125 #6 JAVASCRIPT #dtype: object3 len() 得出字符串的长度。 s pd.Series([C, Python, java, go, np.nan, 1125,javascript]) s.str.len() #0 1.0 #1 6.0 #2 4.0 #3 2.0 #4 NaN #5 4.0 #6 10.0 #dtype: float644 strip() 去除字符串两边的空格包含换行符。 s pd.Series([C , Python\t \n, java , go\t, np.nan, \t1125 ,\tjavascript]) s_strip s.str.strip( ) s_strip #0 C #1 Python\t \n #2 java #3 go\t #4 NaN #5 \t1125 #6 \tjavascript #dtype: object5 split() 用指定的分割符分割字符串。 s pd.Series([Zhang hua, Py thon\n, java ,go,11 25 ,javascript]) print(s.str.split( )) #0 [Zhang, hua] #1 [, Py, thon\n] #2 [, , , java, , , ] #3 [go] #4 [11, 25, ] #5 [javascript] #dtype: object如果不带参数,会先执行 strip()再默认以空格分割。 print(s.str.split()) #0 [Zhang, hua] #1 [Py, thon] #2 [java] #3 [go] #4 [11, 25] #5 [javascript] #dtype: object我们也可以对 strip() 的参数进行设置。 print(s.str.strip().str.split( )) #0 [Zhang, hua] #1 [Py, thon] #2 [java] #3 [go] #4 [11, 25] #5 [javascript] #dtype: object6 cat(sep“”) 用给定的分隔符连接字符串元素。cat(sep“”) 函数会自动忽略 NaN。 s pd.Series([C, Python, java, go, np.nan, 1125,javascript]) scat s.str.cat(sep) s_cat #C_Python_java_go_1125_javascript7 contains(pattern) 如果子字符串包含在元素中则为每个元素返回一个布尔值 True否则为 False。我们可以取出 s 中包含空格的元素。 s pd.Series([C , Python,java,go,1125 ,javascript]) s.str.contains( ) #0 True #1 True #2 False #3 False #4 True #5 False #dtype: bool也可以将 True 返回原数据。 s[s.str.contains( )] #0 C #1 Python #4 1125 #dtype: object8 replace(a,b) 将值 a 替换为值 b。 s pd.Series([C , Python,java,go,1125 ,javascript]) s.str.replace(java,python) #0 C #1 Python #2 python #3 go #4 1125 #5 pythonscript #dtype: object9 count(pattern) 返回每个字符串元素出现的次数。 s pd.Series([C ,Python Python,Python,go,1125 ,javascript]) s.str.count(Python) #0 0 #1 2 #2 1 #3 0 #4 0 #5 0 #dtype: int6410 startswith(pattern) 如果 Series 中的元素以指定的字符串开头则返回 True。11 endswith(pattern) 如果 Series 中的元素以指定的字符串结尾则返回 True。若以指定的 j 开头的字符串则返回 True。 s pd.Series([C , Python,java,go,1125 ,javascript]) print(s.str.startswith(j))​ #0 False #1 False #2 True #3 False #4 False #5 True #dtype: bool12 repeat(value) 以指定的次数重复每个元素。 s pd.Series([C , Python,java,go,1125 ,javascript]) print(s.str.repeat(3)) #0 C C C #1 Python Python Python #2 javajavajava #3 gogogo #4 1125 1125 1125 #5 javascriptjavascriptjavascript #dtype: object13 find(pattern) 返回字符串第一次出现的索引位置。这里如果返回 -1 表示该字符串中没有出现指定的字符。 s pd.Series([C , Python,java,go,1125 ,javascript]) print(s.str.find(a)) #0 -1 #1 -1 #2 1 #3 -1 #4 -1 #5 1 #dtype: int6414 findall(pattern) 以列表的形式返出现的字符串。 s pd.Series([C , Python,java,go,1125 ,javascript]) print(s.str.findall(a)) #0 [] #1 [] #2 [a, a] #3 [] #4 [] #5 [a, a] #dtype: object二、apply() 函数详解 在日常的数据处理中经常会对一个 DataFrame 进行逐行、逐列和逐元素的操作对应这些操作Pandas 中的 map()、apply() 和 applymap() 可以解决绝大部分这样的数据处理需求。三种方法的使用和区别如下apply() 函数应用在 DataFrame 的行或列中。applymap() 函数应用在 DataFrame 的每个元素中。map() 函数应用在单独一列Series的每个元素中。前面也说了 apply() 函数是一般性的“拆分-应用-合并”方法。 apply() 将一个函数作用于 DataFrame 中的每个行或者列它既可以得到一个经过广播的标量值也可以得到一个相同大小的结果数组。我们先来看下函数形式 df.apply(func, axis0, rawFalse, result_typeNone, args(), **kwds)其参数含义如下func 表示函数应用于每一列或每一行。axis 有 0 和 1 或者索引和列两种取值 0 或“索引”表示将函数应用于每一列1或“行”表示将函数应用于每一行。我们先生成初始数据并将列标签设置为 A 和 B。 df pd.DataFrame([[4, 9]] * 3, columns[A, B]) df A B 0 4 9 1 4 9 2 4 9可以使用 apply() 函数对 A、B 两列进行求和axis 参数默认为 0。 df.apply(np.sum) #A 12 #B 27 #dtype: int64我们将 axis 参数设置为 1表示对每一行进行求和。 df.apply(np.sum, axis1) #0 13 #1 13 #2 13 #dtype: int64或者我们使用 lambda 函数做简单的运算。 df.apply(lambda x: x 1)

    A B

    #0 5 10 #1 5 10 #2 5 10但是这样使用起来非常不方便每次都要定义 lambda 函数。因此可以通过 def 定义一个函数然后再调用该函数在实际处理中都是定义自己所需要的函数完成操作 def cal_result(df, x, y):dfC * xdfD * yreturn df我们使用自定义的函数进行计算并生成 C、D 两列。 df.apply(cal_result, x3, y8, axis1)

    A B C D

    #0 4 9 39 104 #1 4 9 39 104 #2 4 9 39 104在这里我们先定义了一个 cal_result 函数它的作用是计算 AB 列和的 x 倍和 y 倍添加到 CD 列中。这里有三种方式可以完成参数的赋值1 第一种方式直接通过关键字参数赋值指定参数的值。2 第二种方式是使用 args 关键字参数传入一个包含参数的元组。3 第三种方式传入通过 ** 传入包含参数和值的字典。apply() 函数的使用是很灵活的再举一个例子配合 loc 方法我们能够在最后一行得到一个总和 df.loc[2] df.apply(np.sum) df

    A B

    #0 4 9 #1 4 9 #2 12 27三、applymap() 函数详解 applymap() 函数针对 DataFrame中 的元素进行操作还是使用这个数据df.applymap(func)。 df

    A B

    #0 4 9 #1 4 9 #2 12 27我们使用 lambda 函数将其变为浮点型。 df.applymap(lambda x: %.2f%x)

    A B

    #0 4.00 9.00 #1 4.00 9.00 #2 4.00 9.00在这里可以看到 applymap() 函数操作的是其中的元素并且是对整个 DataFrame 进行了格式化我们也可以选择行或列中的元素。对行进行选取。 df[[A]]

    A

    #0 4 #1 4 #2 4对列进行选取。 df[[A]].applymap(lambda x: %.2f%x)

    A

    #0 4.00 #1 4.00 #2 4.00需要注意的是这里必须使用 df[[‘A’]] 表示这是一个 DataFrame而不是一个 Series如果使用 df[‘A’] 就会报错。同样从行取元素也要将它先转成 DataFrame。 df[A].applymap(lambda x: %.2f%x) # 异常 #————————————————————————— #AttributeError Traceback (most recent call last) #ipython-input-11-585649caf30e in module() #—- 1 df[A].applymap(lambda x: %.2f%x) # 异常 # #E:\Anaconda\lib\site-packages\pandas\core\generic.py in getattr(self, name)

    5139 if self._info_axis._can_hold_identifiers_and_holds_name(name):

    5140 return self[name]

    #- 5141 return object.getattribute(self, name)

    5142

    5143 def setattr(self, name: str, value) - None:

    # #AttributeError: Series object has no attribute applymap还需要注意 apply() 函数和 applymap() 函数的区别apply() 函数操作的是行或列的运算而不是元素的运算比如在这里使用格式化操作就会报错。applymap() 函数操作的是元素因此没有诸如 axis 这样的参数它只接受函数传入。 四、map() 函数详解 如果对 applymap() 函数搞清楚了那么map() 函数就很简单说白了 map() 函数是应用在 Series 中的还是举上面的例子。 df[A].map(lambda x: %.2f%x) #0 4.00 #1 4.00 #2 4.00 #Name: A, dtype: object需要注意的是Series 没有 applymap() 函数。 df[[A]].applymap(lambda x: %.2f%x) #————————————————————————— #AttributeError Traceback (most recent call last) #ipython-input-11-585649caf30e in module() #—- 1 df[[A]].applymap(lambda x: %.2f%x) # 异常 # #E:\Anaconda\lib\site-packages\pandas\core\generic.py in getattr(self, name)

    5139 if self._info_axis._can_hold_identifiers_and_holds_name(name):

    5140 return self[name]

    #- 5141 return object.getattribute(self, name)

    5142

    5143 def setattr(self, name: str, value) - None:

    # #AttributeError: Series object has no attribute applymap