22 pandas字符串操作

本文介绍了Pandas中用于字符串操作的方法,如`str.cat`用于拼接字符串,`str.split`和`str.partition`进行分隔,以及`str.get`,`str.slice`等用于数据提取和替换。文章详细展示了各种方法的使用示例,包括处理空值和指定分隔符的情况,帮助读者理解和掌握Pandas对字符串数据的处理技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字符串对象方法

在这里插入图片描述

cat和指定字符串进行拼接

查看数据

在这里插入图片描述

不指定参数,所有姓名拼接

import pandas as pd
path='C:/Users/Admin/Desktop/pandas/字符串.xlsx'
data=pd.read_excel(path)
print(data['姓名'].str.cat())# 不指定参数,所有姓名拼接

在这里插入图片描述

不指定参数,所有姓名拼接添加分隔符

import pandas as pd
path='C:/Users/Admin/Desktop/pandas/字符串.xlsx'
data=pd.read_excel(path)
print(data['姓名'].str.cat(sep='、'))# 添加字符

在这里插入图片描述

添加数据

import pandas as pd
path='C:/Users/Admin/Desktop/pandas/字符串.xlsx'
data=pd.read_excel(path)
print(data['姓名'].str.cat(['变身']*len(data)))## ['变身'] * len(data) 相当于 ['变身'] * 6次

在这里插入图片描述

遇到空值时

import pandas as pd
path='C:/Users/Admin/Desktop/pandas/字符串.xlsx'
data=pd.read_excel(path)
print(data['里程'].str.cat(['快跑'] * len(data),sep='^',na_rep='@'))

在这里插入图片描述

合并

在这里插入图片描述

split按照指定字符串分隔

import pandas as pd
path='C:/Users/Admin/Desktop/pandas/字符串.xlsx'
data=pd.read_excel(path)
print(data)
print(data['状态'].str.split())# 不指定分隔符,就是一列表
print(data['状态'].str.split('血')) # 和python内置split一样
print(data['状态'].str.split('血',n=-1)) # 指定n,表示分隔次数,默认是-1,全部分隔
print(data['状态'].str.split('血',expand=True))

# 注意这个expand,默认是False,得到是一个列表
# 如果指定为True,会将列表打开,变成多列,变成DATAFrame
# 列名则是按照0 1 2 3····的顺序,并且默认Nan值分隔后还是为Nan
# 如果分隔符不存在,还是返回DATAFrame

在这里插入图片描述

partition 按照指定字符串分割

import pandas as pd
path='C:/Users/Admin/Desktop/pandas/字符串.xlsx'
data=pd.read_excel(path)
print(data)
print(data['状态'].str.partition('血'))# 不指定分隔符,就是一列表
# partition只会分隔一次
# 第一个元素:第一个分隔符之前的部分
# 第二个元素:分隔符本身
# 第三个元素:第一个分隔符之后的内容
# 如果有多个分隔符,也只会按照第一个分隔符分隔
print('BbBbB'.partition('b'))
print((data['状态'].str.partition('平')))
print((data['状态'].str.partition()))

在这里插入图片描述

get 获取指定位置的字符,只能获取1个

import pandas as pd
path='C:/Users/Admin/Desktop/pandas/字符串.xlsx'
data=pd.read_excel(path)
print(data)
print(data['状态'].get(2))


# 如果全部越界,那么None也为NaN,并且整体是float64类型
# 如果pandas用的时间比较长的话,一定会遇见该问题
# 像数据库、excel、csv等等,原来的类型明明为整型,但是读成DataFrame之后变成浮点型了
# 就是因为含有空值,变成float了。
"""
如果是object类型(或者理解为str),空值可以是None,也可以是NaN,但不可以是NaT

对于整型来说,如果含有空值,那么空值为NaN。
对于时间类型来说,如果含有空值,那么空值为NaT。
即使你想转化也是没用的,如果想把NaN或者NaT变成None,只有先变成object(str)类型,才可以转化
"""

在这里插入图片描述

slice 获取指定范围的字

import pandas as pd
path='C:/Users/Admin/Desktop/pandas/字符串.xlsx'
data=pd.read_excel(path)
print(data)
print(data['状态'].str.slice(0)) # 指定一个值的话,相当于[m:]
print(data['状态'].str.slice(0,3)) # 相当于[m:n],从0开始不包括3
print(data['状态'].str.slice(0,3,2)) # 相当于[m: n: step]
print(data['状态'].str.slice(5,9,2)) # 索引越界,默认为空字符串,原来Nan还是Nan

在这里插入图片描述

slice_replace 筛选之后替换

import pandas as pd
path='C:/Users/Admin/Desktop/pandas/字符串.xlsx'
data=pd.read_excel(path)
print(data)
print(data['状态'].str.slice_replace(1,3,"520")) # 指定一个值的话,相当于[m:]

在这里插入图片描述

join将每个字符之间使用指定字符相连

import pandas as pd
path='C:/Users/Admin/Desktop/pandas/字符串.xlsx'
data=pd.read_excel(path)
print(data)
print(data['状态'].str.join('a')) 

在这里插入图片描述

contains 判断字符串是否含有指定字串,返回的是bool类型

import pandas as pd
path='C:/Users/Admin/Desktop/pandas/字符串.xlsx'
data=pd.read_excel(path)
print(data)
print(data['状态'].str.contains('血'))  # NaN还是返回Nan
print(data['状态'].str.contains('血',na=False))
print(data['状态'].str.contains('血',na=True))
print(data['状态'].str.contains('血',na="没有"))

在这里插入图片描述

startswith 是否某个字串开头

import pandas as pd
path='C:/Users/Admin/Desktop/pandas/字符串.xlsx'
data=pd.read_excel(path)
print(data)
print(data['状态'].str.startswith('满'))

在这里插入图片描述

endswith 判断是否以某个子串结尾

import pandas as pd
path='C:/Users/Admin/Desktop/pandas/字符串.xlsx'
data=pd.read_excel(path)
print(data)
print(data['状态'].str.endswith('满'))

在这里插入图片描述

repeat 重复字符串

import pandas as pd
path='C:/Users/Admin/Desktop/pandas/字符串.xlsx'
data=pd.read_excel(path)
print(data)
print(data['姓名'].str.repeat(3))  # 把姓名重复3次

在这里插入图片描述

pad将每一个元素都用指定的字符填充,只能是一个字符

import pandas as pd
path='C:/Users/Admin/Desktop/pandas/字符串.xlsx'
data=pd.read_excel(path)
print(data)
print(data['姓名'].str.pad(5,fillchar='&'))# 表示要占5个长度,用"&"填充,默认填在左边的
print(data["姓名"].str.pad(5, fillchar="<", side="right"))# 表示要占5个长度,用"&"填充,指定填在右边
print(data["姓名"].str.pad(5, fillchar="<", side="both"))# 指定side为both,会填在两端

在这里插入图片描述

zfill填充,只能是0,从左边填充

import pandas as pd
path='C:/Users/Admin/Desktop/pandas/字符串.xlsx'
data=pd.read_excel(path)
print(data)
print(data['姓名'].str.zfill(10))

在这里插入图片描述

strip 按照指定内容,从两边去除

import pandas as pd
path='C:/Users/Admin/Desktop/pandas/字符串.xlsx'
data=pd.read_excel(path)
print(data)
print(data['里程'].str.strip("中远近离"))

在这里插入图片描述

get_dummies

import pandas as pd
path='C:/Users/Admin/Desktop/pandas/字符串.xlsx'
data=pd.read_excel(path)
print(data)
print(data['里程'].str.get_dummies('距'))
# 按照"距"进行分割,得到列表
# 所有列表中的元素总共有"中远、近、远、离"四种

在这里插入图片描述

translate 指定部分替换

import pandas as pd
path='C:/Users/Admin/Desktop/pandas/字符串.xlsx'
data=pd.read_excel(path)
print(data)
字典 = str.maketrans({'距':'ju','离':'li'})
print(data['里程'].str.translate(字典))

在这里插入图片描述

find 查找指定字符串第一次出现的位置

import pandas as pd
path='C:/Users/Admin/Desktop/pandas/字符串.xlsx'
data=pd.read_excel(path)
print(data)
print(data["日期"].astype('str').str.find("-"))
# 当然可以指定范围,包括起始和结束
print(data["日期"].astype('str').str.find("-", 5))
print(data["日期"].astype('str').str.find("我")) #找不到返回-1

在这里插入图片描述
在这里插入图片描述

字母大小写

在这里插入图片描述

判断【返回T或F】

在这里插入图片描述

match 是否匹配给定的模式

import pandas as pd
path='C:/Users/Admin/Desktop/pandas/字符串.xlsx'
data=pd.read_excel(path)
print(data)
print(data['状态'].str.match(".{2}激"))
# NaN还是返回Nan,可按照 na= False 或 na = True 替换

在这里插入图片描述

extract 分组捕捉

import pandas as pd
path='C:/Users/Admin/Desktop/pandas/字符串.xlsx'
data=pd.read_excel(path)
print(data)
print(data["日期"].astype('str').str.extract("\d{4}-(\d{2})-(\d{2})"))

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值