pandas 文本处理大全(附代码)

Pandas的常用操作大全 1. Series的创建 操作 代码实现 返回值 说明 通过list构建Series (1)pd.Series(range(10))(2)pd.Series(range(3), index = [‘a’, ‘b’, ‘c’]) 新Series (1)自动生成索引(2)自定义索引 通过dict构建Series pd.Series(dict) 新Series dict的key为索引... 阅读详情

大家好,我是东哥。

继续更新pandas数据清洗,历史文章:

感兴趣可以关注这个话题pandas数据清洗,第一时间看到更新。

所有数据和代码可在我的GitHub获取:

https://github.com/xiaoyusmd/PythonDataScience

本次来介绍关于文本处理的常用方法。


文本的主要两个类型是string和object。如果不特殊指定类型为string,文本类型一般为object。

文本的操作主要是通过访问器str 来实现的,功能十分强大,但使用前需要注意以下几点。

  1. 访问器只能对Series数据结构使用。 除了常规列变量df.col以外,也可以对索引类型df.Index和df.columns使用

  2. 确保访问的对象类型是字符串str类型。 如果不是需要先astype(str)转换类型,否则会报错

  3. 访问器可以多个连接使用。 如df.col.str.lower().str.upper(),这个和Dataframe中的一行操作是一个原理

下面正式介绍文本的各种骚操作,基本可以涵盖日常95%的数据清洗需要了,一共 8 个场景。

149e981e196b07ad23d7e8ed710567dd.png

以下操作均基于下面的数据:

import pandas as pd
import numpy as np

df = pd.DataFrame({'name':['jordon', 'MIKE', 'Kelvin', 'xiaoLi', 'qiqi','Amei'],
                   'Age':[18, 30, 45, 23, 45, 62],
                   'level':['high','Low','M','L','middle',np.nan],
                   'Email':['jordon@sohu.com','Mike@126.cn','KelvinChai@gmail.com','xiaoli@163.com',np.nan,'amei@qq.com']})
--------------------------------------------
   name   Age   level    Email
0  jordon  18    high    jordon@sohu.com
1  MIKE    30     Low    Mike@126.cn
2  Kelvin  45       M    KelvinChai@gmail.com
3  xiaoLi  23       L    xiaoli@163.com
4  qiqi    45  middle    NaN
5  Amei    62     NaN    amei@qq.com

1、文本格式

大小写变换

# 字符全部变成小写
s.str.lower()
# 字符全部大写
s.str.upper()
# 每个单词首字母大写
s.str.title()
# 字符串第一个字母大写
s.str.capitalize()
# 大小写字母转换
s.str.swapcase()

上面用法都比较简单,不逐一举例,这里举一个对columns变成小写的例子。

df.columns.str.lower()
--------------------------------------------------------
Index(['name', 'age', 'level', 'email'], dtype='object')

格式判断

下面均为判断操作,因此返回布尔值。

s.str.isalpha # 是否为字母
s.str.isnumeric # 是否为数字0-9
s.str.isalnum # 是否由字母和数字组成
s.str.isupper # 是否为大写
s.str.islower # 是否为小写
s.str.isdigit # 是否为数字

对齐

# 居中对齐,宽度为8,其余用’*’填充
s.str.center(, fillchar='*')
# 左对齐,宽度为8,其余用’*’填充
s.str.ljust(8, fillchar='*')
# 右对齐,宽度为8,其余用’*’填充
s.str.rjust(8, fillchar='*')
# 自定义对齐方式,参数可调整宽度、对齐方向、填充字符
s.str.pad(width=8, side='both',fillchar='*')
# 举例
df.name.str.center(8, fillchar='*')
-------------
0    *jordon*
1    **MIKE**
2    *Kelvin*
3    *xiaoLi*
4    **qiqi**
5    **Amei**

计数和编码

s.str.count('b') # 字符串种包括指定字母的数量
s.str.len() # 字符串长度
s.str.encode('utf-8') # 字符编码
s.str.decode('utf-8') # 字符解码

2、文本拆分

通过使用split方法可以某个指定的字符作为分割点拆分文本。其中,expand参数可以让拆分的内容展开,形成单独的列,n参数可以指定拆分的位置来控制形成几列。

下面将email变量按照@进行拆分。

# 使用方法
s.str.split('x', expand=True, n=1)
# 举例
df.Email.str.split('@')
----------------------------
0         [jordon, sohu.com]
1            [Mike, 126.cn]
2    [KelvinChai, gmail.com]
3          [xiaoli, 163.com]
4                        NaN
5             [amei, qq.com]
# expand可以让拆分的内容扩展成单独一列
df.Email.str.split('@' ,expand=True)
----------------------------
   0          1
0  jordon      sohu.com
1  Mike        126.cn
2  KelvinChai  gmail.com
3  xiaoli      163.com
4  NaN         NaN
5  amei        qq.com

更复杂的拆分可以借助正则表达式,比如想同时通过@和.进行拆分,那么可以这样实现。

df.Email.str.split('\@|\.',expand=True)
----------------------------
   0           1      2
0  jordon      sohu   com
1  Mike        126    cn
2  KelvinChai  gmail  com
3  xiaoli      163    com
4  NaN         NaN    NaN
5  amei        qq     com

3、文本替换

文本替换有几种方法:replace,slice_replace,repeat

replace替换

replace方法是最常用的替换方法,参数如下:

  • pal:为被替代的内容字符串,也可以为正则表达式

  • repl:为新内容字符串,也可以是一个被调用的函数

  • regex:用于设置是否支持正则,默认是True

# 将email种的com都替换为cn
df.Email.str.replace('com','cn')
------------------------
0         jordon@sohu.cn
1            Mike@126.cn
2    KelvinChai@gmail.cn
3          xiaoli@163.cn
4                    NaN
5             amei@qq.cn

更复杂一点的,比如将旧内容写成正则表达式。

#将@之前的名字都替换成xxx
df.Email.str.replace('(.*?)@','xxx@')
------------------
0     xxx@sohu.com
1       xxx@126.cn
2    xxx@gmail.com
3      xxx@163.com
4              NaN
5       xxx@qq.com

或者将新内容写成被调用的函数。

df.Email.str.replace('(.*?)@', lambda x:x.group().upper())
-------------------------
0         JORDON@sohu.com
1             MIKE@126.cn
2    KELVINCHAI@gmail.com
3          XIAOLI@163.com
4                     NaN
5             AMEI@qq.com

切片替换

slice_replace通过切片的方式实现替换,通过切片可以保留或者删除指定的字符,参数如下。

  • start:起始位置

  • stop:结束位置

  • repl:要替换用的新内容

对start切片位置之后和stop切片位置之前进行替换,如果没有设置stop,那么start之后全部进行替换,同理如果没设置start,那么stop之前全部进行替换。

df.Email.str.slice_replace(start=1,stop=2,repl='XX')
-------------------------
0         jXXrdon@sohu.com
1             MXXke@126.cn
2    KXXlvinChai@gmail.com
3          xXXaoli@163.com
4                      NaN
5             aXXei@qq.com

重复替换

repeat可以实现重复替换的功能,参数repeats设置重复的次数。

df.name.str.repeat(repeats=2)
-------------------------
0    jordonjordon
1        MIKEMIKE
2    KelvinKelvin
3    xiaoLixiaoLi
4        qiqiqiqi
5        AmeiAmei

4、文本拼接

文本拼接通过cat方法实现,参数:

  • others: 需要拼接的序列,如果为None不设置,就会自动把当前序列拼接为一个字符串

  • sep: 拼接用的分隔符

  • na_rep: 默认不对空值处理,这里设置空值的替换字符。

  • join: 拼接的方向,包括left, right, outer, inner,默认为left

主要有以下几种拼接方式。

1. 将单个序列拼接为一个完整字符串

如上所述,当没有设置ohters参数时,该方法会将当前序列合并为一个新的字符串。

df.name.str.cat()
-------------------------------
'jordonMIKEKelvinxiaoLiqiqiAmei'
# 设置sep分隔符为`-`
df.name.str.cat(sep='-')
-------------------------------
'jordon-MIKE-Kelvin-xiaoLi-qiqi-Amei'
# 将缺失值赋值为`*`
df.level.str.cat(sep='-',na_rep='*')
-----------------------
'high-Low-M-L-middle-*'

2. 拼接序列和其他类列表型对象为新的序列

下面先将name列和*列拼接,再将level列拼接,形成一个新的序列。

# str.cat多级连接实现多列拼接
df.name.str.cat(['*']*6).str.cat(df.level)
----------------
0    jordon*high
1       MIKE*Low
2       Kelvin*M
3       xiaoLi*L
4    qiqi*middle
5            NaN
# 也可以直接多列拼接
df.name.str.cat([df.level,df.Email],na_rep='*')
--------------------------------
0      jordonhighjordon@sohu.com
1             MIKELowMike@126.cn
2    KelvinMKelvinChai@gmail.com
3          xiaoLiLxiaoli@163.com
4                    qiqimiddle*
5               Amei*amei@qq.com

将一个序列与多个对象拼接为一个新的序列

5、文本提取

文本提取主要通过extract来实现的。

extract参数:

  • pat: 通过正则表达式实现一个提取的pattern

  • flags: 正则库re中的标识,比如re.IGNORECASE

  • expand: 当正则只提取一个内容时,如果expand=True会展开返回一个DataFrame,否则返回一个Series

# 提取email中的两个内容
df.Email.str.extract(pat='(.*?)@(.*).com')
--------------------
   0          1
0  jordon      sohu
1  vMike      NaN
2  KelvinChai  gmail
3  xiaoli      163
4  NaN         NaN
5  amei        qq

6、文本查询

通过find和findall两个方法实现。

find 参数很简单,直接输入要查询的字符串即可,返回在原字符串中的位置,没查询到结果返回-1。

df['@position'] = df.Email.str.find('@')
df[['Email','@position']]
-------------------------------------
    Email                   @position
0   jordon@sohu.com         6.0
1   Mike@126.cn             4.0
2   KelvinChai@gmail.com    10.0
3   xiaoli@163.com          6.0
4   NaN                     NaN
5   amei@qq.com             4.0

上面示例返回@在email变量中的位置。

另外一个查找方法是findall

findall参数:

  • pat: 要查找的内容,支持正则表达式

  • flag: 正则库re中的标识,比如re.IGNORECASE

findall和find的区别是支持正则表达式,并返回具体内容。这个方法有点类似extract,也可以用于提取,但不如extract方便。

df.Email.str.findall('(.*?)@(.*).com')
--------------------------
0         [(jordon, sohu)]
1                       []
2    [(KelvinChai, gmail)]
3          [(xiaoli, 163)]
4                      NaN
5             [(amei, qq)]

上面示例返回正则查找的两个部分,并以元组列表的形式出现。

7、文本包含

文本包含通过contains方法实现,返回布尔值,一般和loc查询功能配合使用,参数:

  • pat: 匹配字符串,支持正则表达式

  • case: 是否区分大小写,True表示区别

  • flags: 正则库re中的标识,比如re.IGNORECASE

  • na: 对缺失值填充

  • regex: 是否支持正则,默认True支持

df.Email.str.contains('jordon|com',na='*')
----------
0     True
1    False
2     True
3     True
4        *
5     True
# 
df.loc[df.Email.str.contains('jordon|com', na=False)]
------------------------------------------
   name    Age  level  Email                 @position
0  jordon  18   high   jordon@sohu.com        6.0
2  Kelvin  45   M      KelvinChai@gmail.com   10.0
3  xiaoLi  23   L      xiaoli@163.com         6.0
5  Amei    62   NaN    amei@qq.com            4.0

这里需要注意一下,如果和loc配合使用,注意不能有缺失值,否则会报错。可以通过设置na=False忽略缺失值完成查询。

8、文本的虚拟变量

get_dummies可以将一个列变量自动生成虚拟变量(哑变量),这种方法在特征衍生中经常使用。

df.name.str.get_dummies()
-------------------------------
  Amei Kelvin MIKE jordon qiqi xiaoLi
0   0     0     0     1     0     0
1   0     0     1     0     0     0
2   0     1     0     0     0     0
3   0     0     0     0     0     1
4   0     0     0     0     1     0
5   1     0     0     0     0     0

以上就是本次分享内容。

原创不易,欢迎点赞、留言、分享,支持我继续写下去。

参考:

[1]深入浅出pandas

[2]http://www.pypandas.cn/

觉得还不错就给我一个小小的鼓励吧!
pandas日常使用大全 中国 美国 英国 德国 法国 总数。中国 美国 英国 德国 法国 总数。方差 标准差 均值 变异系数。中国 美国 英国 德国 法国 总数。中国 美国 英国 德国 法国。Name: 总数, dtype: float64。Name: 中国, dtype: float64。计算75%的分位数,Q3,上四分位数。如果存在多个众数,则求他们的均值。 阅读详情

相关推荐

形位公差标注的常见误区与优化策略

本文深入解析机械设计中形位公差标注的常见误区与优化策略,特别针对NX2406用户提供实用技巧。从标注冗余、基准选择到公差值设定等五大误区入手,结合工程图实例展示如何提升标注精度与效率,帮助工程师避免常见错误,优化设计流程,确保零件功能实现与制造可行性。

info6的博客 246

[python学习笔记]DataFrame中df['name']、df[['name']]和df.name的区别

在DataFrame中: df['name']#得到的是不包含列索引的Series结构 df[['name']]#得到是包含列索引的DataFrame结构 df.name#得到是不包含列索引的Series结构 注意事项: df.name cor 1#当列名中包含空格时,这种写法会报错 df.new_column = 50#df.name无法用于原DataFrame中不存在的列,即不能用来新增一列...

狂扁小朋友的学习笔记 1万+

Dify学习笔记-知识库(六)

Dify学习笔记-知识库

大数据知识梳理 2万+

Pandas文本处理

Pandas 为 文本处理提供了 str 属性,通过该属性可以自动跳过缺失/NA 值对每个元素进行操作。

- 1872

数字IC时序约束实战:深入解析clock_uncertainty的设置策略与后端影响

本文深入探讨数字IC设计中clock_uncertainty的设置策略及其对后端实现的影响。通过分析时钟不确定度的组成(包括clock_skew、clock_jitter和margin),并结合实际项目经验,详细介绍了在不同设计阶段(综合、布局布线、签核)的动态调整方法。文章还提供了工程化处理参数来源、跨时钟域特殊处理以及优化时序收敛的实用技巧,帮助工程师提升数字IC设计的可靠性和性能。

weixin_29284657的博客 229

C# 死锁:原理、诊断与解决方案深度解析

本文深入探讨了C#中的死锁问题,详细介绍了死锁的基本概念、形成机制、常见场景、诊断方法及解决方案。死锁通常发生在多线程环境下,当多个线程因争夺资源而互相等待时,导致程序无法继续执行。文章通过代码示例展示了常见的死锁场景,如锁的嵌套、同步上下文死锁和线程池死锁,并提供了使用Visual Studio、WinDbg等工具进行死锁诊断的方法。此外,文章还提出了多种预防和解决死锁的策略,包括保持锁顺序一致性、使用锁超时机制、避免同步阻塞异步代码以及使用更高级的同步原语。通过这些方法,开发者可以有效减少死锁的发生,提

记录学习的过程 1408

Pandas玩转文本处理

对于文本数据的处理(清洗),是现实工作中的数据时不可或缺的功能,在这一节中,我们将介绍Pandas的字符串操作。Python内置一系列强大的字符串处理方法,但这些方法。

qq_41771998的博客 622

高速接口SI验证核心:Loopback回环测试原理与三层实践

Loopback(回环测试)是高速数字接口信号完整性(SI)验证的基础技术,其本质是通过内部路径将发送信号原路返回接收端,实现芯片级物理层行为的隔离测量。原理上分为数字环回、近端模拟环回和远端模拟环回三层,分别对应协议逻辑、TX/RX模拟前端及全链路SI压力验证。该技术具备强工程落地性,能直接暴露驱动器温漂、封装阻抗失配、电源噪声耦合等底层问题,在PCIe 5.0、CXL、HBM3等先进接口验证中不可替代。结合PRBS序列激励、眼图分析与BER量化,loopback成为连接仿真模型校准与系统联调的关键枢纽,

weixin_34274029的博客 408

深入Pandas:精通文本数据处理的20+技巧与应用实例

Pandas是Python中一款强大的数据分析库,提供了许多灵活的功能来处理和分析数据。在实际数据处理中,文本数据是常见的一种数据类型。本文将介绍Pandas中针对文本数据的处理方法,包括str/object类型转换、大小写转换、文本对齐、获取长度、出现次数、编码等方面的技术。

一键难忘的博客 4258

Conda换源全攻略:从清华源到默认源的保姆级切换教程(附常见问题解决)

本文提供Conda换源的完整教程,详细讲解如何从清华源切换到默认源,包括配置步骤、常见问题解决方案及高级技巧。针对国内开发者遇到的下载速度慢问题,清华源提供了高速稳定的解决方案,同时文章也介绍了恢复默认源的方法和多种镜像源选择。

weixin_28837817的博客 942

【SAP GUI 脚本 VBA】实战:构建Excel驱动的SAP自动化操作平台

本文详细介绍了如何利用VBA和SAP GUI脚本构建Excel驱动的SAP自动化操作平台,实现高频事务码的标准化封装和批量处理。通过实战案例展示物料主数据查询(MM03)、会计凭证修改(FB02)等场景的自动化实现,帮助用户提升10倍+操作效率,同时确保数据可追溯性和操作安全性。

weixin_33748818的博客 506

熬夜整理!Pandas 文本处理大全

本次来介绍关于文本处理的常用方法。文本的主要两个类型是string和object。如果不特殊指定类型为string,文本类型一般为object。文本的操作主要是通过str来实现的,功能十分强大,但使用前需要注意以下几点。Series除了常规列变量df.col以外,也可以对索引类型df.Index和df.columns使用str如果不是需要先转换类型,否则会报错如,这个和Dataframe中的一行操作是一个原理下面正式介绍文本的各种骚操作,基本可以涵盖日常95%的数据清洗需要了,一共 8 个场景。

2401_86168842的博客 1091

203.华为组网实例:VLAN间互通DHCP中继实验

SW核心交换机上配置DHCP中继。

迷逝 8432

pandas 、split 、replace 文本处理大全

通过使用split方法可以某个指定的字符作为分割点拆分文本。其中,expand参数可以让拆分的内容展开,形成单独的列,n参数可以指定拆分的位置来控制形成几列。代码如下(示例):文本替换有几种方法:replace,slice_replace,repeat。repl:为新内容字符串,也可以是一个被调用的函数。pal:为被替代的内容字符串,也可以为正则表达式。regex:用于设置是否支持正则,默认是True。

nfkjdx的博客 532

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

pandas(五) -- 文本处理

文本处理.–使用字符串处理函数 先将pandas的series对象转成strings对象,再使用字符串相关函数。 s = pd.Series(['A','b','C','bbhello','123',np.nan,'hj']) 0 A 1 b 2 C 3 bbhello 4 123 5 NaN 6 ...

Blankit1的博客 2394

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Python之Pandas文本处理

一、str对象 1.str对象的设计意图 str对象是定义在Index或Series上的属性,专门用于处理每个元素的文本内容,其内部定义了大量方法,因此对一个序列进行文本处理,首先需要获取其str对象。在Python标准库中也有str模块,为了使用上的便利,有许多函数的用法pandas照搬了它的设计,例如字母转为大写的操作。 import numpy as np import pandas as pd var = 'abcd' str.upper(var) # Python内置str模块 # re

ytp552200ytp的博客 1263

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

pandas文本处理

Pandas 提供了丰富的字符串处理功能,使得处理文本数据变得非常方便。这些功能可以单独使用也可以组合起来完成更复杂的任务。

C'mon的博客 758

pandas 文本处理大全

作者 | 东哥起飞来源 |Python数据科学本次来介绍关于文本处理的常用方法。文本的主要两个类型是string和object。如果不特殊指定类型为string,文本类型一般为object。文本的操作主要是通过访问器str 来实现的,功能十分强大,但使用前需要注意以下几点。访问器只能对Series数据结构使用。 除了常规列变量df.col以外,也可以对索引类型df.In...

AI科技大本营 643

pandas用法大全

一、生成数据表 1、首先导入pandas库,一般都会用到numpy库,所以我们先导入备用: import numpy as np import pandas as pd 2、导入CSV或者xlsx文件: df = pd.DataFrame(pd.read_csv(‘name.csv’,header=1)) df = pd.DataFrame

liufang0001的博客 22万+

pandas 缺失数据处理大全(附代码)

大家好,我是东哥。 之前一直在分享pandas的一些骚操作:pandas骚操作,根据大家反映还不错,但是很多技巧都混在了一起,没有细致的分类,这样不利于查找,也不成体系。 利用闲暇之余将有关数据清洗、数据分析的一些技能再次进行分类,里面也包含了我平时用到的一些小技巧,此次就从数据清洗缺失值处理走起,链接:pandas数据清洗,关注这个话题可第一时间看到更新。 所有数据和代码可在我的GitHub获取: https://github.com/xiaoyusmd/PythonDataScience 如有帮助,

Python数据科学 3376

10_Pandas文本处理、分类数据

object和StringDtype是Pandas的两个文本类型。在1.0版本前,object是唯一文本类型,Pandas会将混杂各种类型的一列数据归为object,1.0版本后,推荐使用新的类型StringDtype。

qq_27953479的博客 1298

pandas 分类数据处理大全(附代码)

大家好,我是东哥。 继续更新pandas数据清洗,历史文章: 感兴趣可以关注这个话题:pandas数据清洗,第一时间看到更新。 所有数据和代码可在我的GitHub获取: https://github.com/xiaoyusmd/PythonDataScience category是pandas的一种分类的定类数据类型。和文本数据.str.<methond>一样,它也有访问器功能.cat.<method>。 本文将介绍: 什么是分类数据? 分类数据cat的处理方法 为什么要使用

Python数据科学 4927
上一篇: 我的机器学习入门清单及路线!
下一篇: 深度学习优化背后包含哪些数学知识?
Wang_AI
博客等级 码龄12年 997粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值