pandas字符串处理及列转行

df1.loc[:,'前部']=df1['班级名称'].str.slice(0,15)
df1.loc[:,'大区']=df1['班级名称'].str.split('-').str[0]
df1.loc[:,'版本']=df1['班级名称'].str.split('-').str[1]
df1.loc[:,'进度']=df1['班级名称'].str.split('-').str[2]
df1.loc[:,'时间']=df1['班级名称'].str.split('-').str[3]
df1.loc[:,'时间1']=df1['时间'].str.split('(').str[0]
df1['id尾号']=df1['姓名id'].str.split('-',n=2).str[1].str.slice(0,6)

常规字符串截取处理

(编辑技巧:mac❀+数字2,设定为目录)

1、str.cat和指定字符串

df1.loc[:,'合并']=df1['大区'].str.cat(df1['版本'],sep='-').str.cat(df1['进度'],sep='-')

str.cat可以连接多列,并设定连接符

2、split按照指定字符分割

df1.loc[:,'大区']=df1['班级名称'].str.split('-').str[0]

df1['id尾号']=df1['姓名id'].str.split('-',n=2).str[1].str.slice(0,6)

以上为按‘-’分割某列,并取分割后的第一部分字符串

split('-',expand=True,n=1),expand默认是False,若设置为True则会将列表展开,变成多列,n是设置分列的次数,n=1则分割一次,成2部分

rsplit和split用法一致,只不过是从右边开始分列

3、partition按照指定字符进行分割,且只分割一次

df1.loc[:,'1']=df1['合并'].str.partition('-')[2]

如上,partition分割后只能引用0,1,2三个部分,引用形式如代码所示

如果有多个分隔符,也只会按第一个分隔符进行分裂

rpartition和partition类似,只不过会从右往左找第一个分隔符进行分裂

4、get获取某列字符串的特定字符

df1.loc[:,'te']=df1['合并'].str.get(2)

如上,获取列的第三个字符方法

5、replace替换,slice切片截取,slice_replace截断替换,translate单字母替换

df1.loc[:,'截断替换']=df1['合并'].str.slice_replace(0,1,'lingo班课')

把某一列的前两个字符,替换为指定字符串,如上所示

dic=str.maketrans({'A':'啊'})
df1.loc[:,'字母替换']=df1['合并'].str.translate(dic)

把所有的字符“A”替换为指定字符“啊”

6、isnumeric数字及字母判断

df1.loc[:,'数字字母判断']=df1['合并'].str.isnumeric()
  1. sdecimal 只能用于Unicode数字
  2. isalnum 判断是否全是字母或者数字
  3. isalpha 是否全是字母
  4. isdigit用于Unicode数字,罗马数字
  5. isnumeric用于unicode数字,罗马数字,汉字数字

7、条件查询:startswith开头,endswiths结尾,contains包含

df1.loc[:,'开头是']=df1['合并'].str.startswith('A')

8、repeat复制

str.repeat(2)复制两次

9、strip、lstrip、rstrip删除

str.strip('-'),按照指定字符从两边、左边、右边删除

10、大小写替换

  1. str.lower() # 所有字符转成小写
  2. str.upper()# 所有字符转成大写
  3. str.title()# 每一个单词的首字母大写
  4. str.capitalize()# 第一个字母大写
  5. str.swapcase()# 大小写交换

11、str.zfill(width=n)在字符串左侧补齐特定数量的0

df1.loc[:,'规则小时']=df1['小时'].str.zfill(width=2)

结果如下所示:补齐前和补齐后

str.rjust(width=n,'填充的字符')

df=pd.DataFrame({'姓名':['张三','李四','王麻子']})
df['姓名填充']=df['姓名'].str.rjust(3,'O')
print(df)

12、str.pad(width=n,side='right')字符串在右边补齐相同长度的空格

df['Name'] = df['Name'].str.pad(width=10, side='right')

如果要将一个字符串列补全为特定长度,可以使用str.pad()方法。该方法接受两个参数:widthside。其中width是希望补全到的长度,side可以是leftrightboth, 分别表示左侧、右侧或两侧补全。默认情况下,sideright

13、列转行

df3=df1.copy()
df3['学员ID']=df3['新班级学生ID'].str.split(',')
df4=df3.explode('学员ID')
print(df4.head(1).T)

用原数据的字段分列,创建新列,使用explode爆炸函数,把一行转换成多行,explode 这个爆炸方法只能处理列表、元组、Series等类型。

若数据框中数据为非可爆炸的类型,则可提前进行分列操作。

示例:

df1['版本']=df1['版本权限名称'].str.split(';')
df2=df1.explode('版本').drop_duplicates().reset_index()

即可把一行数据转换为多行数据,进行分类统计处理

14、待续

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值