pandas str方法的使用

pandas的str方法

pandas特定的列经过str之后,就可以使用各种python常用的字符处理方法了。
首先,构建dataframe:

import pandas as pd
d={'gene':{'a':'gene1','b':'gene2','c':'gene3','d':'gene4'},'expression':{'a':'low:0','b':'mid:3','c':'mid:4','d':'high:9'},'description':{'a':'transposon element','b':'nuclear genes','c':'retrotransposon','d':'unknown'}}
df=pd.DataFrame(d)
print(df)
    gene expression         description
a  gene1      low:0  transposon element
b  gene2      mid:3       nuclear genes
c  gene3      mid:4          retrotransposon
d  gene4     high:9             unknown

几种常见的str方法如下:

筛选出含有特定字符串的行:contains() 方法

df1=df[df['description'].str.contains('transposon')]
print(df1)
    gene expression         description
a  gene1      low:0  transposon element
c  gene3      mid:4          retrotransposon

字符串分割(将特定列拿出来,按特定字符分开,然后形成一个新的dataframe)

df1=df['columns_name'].str.split(':',expand=True)
print(df1)
      0  1
a   low  0
b   mid  3
c   mid  4
d  high  9

当然,可以直接将这两列加到df中:

df[['exp1','exp2']]=df['expression'].str.split(':',expand=True)
print(df)
    gene expression         description  exp1 exp2
a  gene1      low:0  transposon element   low    0
b  gene2      mid:3       nuclear genes   mid    3
c  gene3      mid:4     retrotransposon   mid    4
d  gene4     high:9             unknown  high    9

注意1:
此时exp2这一列的数据类型是object,即python中的str,而不是int。可以通过astype将其转换为int

print(df['exp2'].dtype)
dtype('O')#'O'即object

df['exp2']=df['exp2'].astype(int)

print(df['exp2'].dtype)
dtype('int32')

注意2:
expand=True不加的话,df1中将只有一列,其实就是一个series。

df=pd.DataFrame(d)
df1=df['expression'].str.split(':')
print(df1)
a     [low, 0]
b     [mid, 3]
c     [mid, 4]
d    [high, 9]
Name: expression, dtype: object
type(df1)
<class 'pandas.core.series.Series'>

字符串的替换

print(df)
    gene expression         description  exp1 exp2
a  gene1      low:0  transposon element   low    0
b  gene2      mid:3       nuclear genes   mid    3
c  gene3      mid:4     retrotransposon   mid    4
d  gene4     high:9             unknown  high    9

df['gene']=df['gene'].str.replace('gene','Gene')

print(df)
    gene expression         description  exp1 exp2
a  Gene1      low:0  transposon element   low    0
b  Gene2      mid:3       nuclear genes   mid    3
c  Gene3      mid:4     retrotransposon   mid    4
d  Gene4     high:9             unknown  high    9

字符串两端的字符的判断 startswith 与 endswith

df1=df[df['expression'].str.startswith('m')]
print(df1)
    gene expression      description exp1 exp2
b  gene2      mid:3    nuclear genes  mid    3
c  gene3      mid:4  retrotransposon  mid    4

正则表达式 findall的使用

s=df['expression'].str.findall('[a-z]+')
print(s)
a     [low]
b     [mid]
c     [mid]
d    [high]
Name: expression, dtype: object

去除特定字符strip(包括lstrip和rstrip)

print(df1)
    gene expression      description exp1 exp2
b  gene2      mid:3    nuclear genes  mid    3
c  gene3      mid:4  retrotransposon  mid    4

df1['expression']=df1['expression'].str.lstrip('mid:')
print(df1)
    gene expression      description exp1 exp2
b  gene2          3    nuclear genes  mid    3
c  gene3          4  retrotransposon  mid    4
### Pandas中的字符串处理方法 Pandas 提供了一组强大的工具来处理字符串数据,这些方法主要集中在 `Series.str` 属性上。以下是 Pandas 中常用的字符串处理方法及其功能: #### 基本字符串操作 1. **访问字符长度** 使用 `.str.len()` 方法可以获取字符串的长度[^2]。 ```python import pandas as pd s = pd.Series(['apple', 'banana', None]) lengths = s.str.len() print(lengths) ``` 2. **大写转换** 将字符串转为大写的 `.str.upper()` 方法。 ```python uppercased = s.str.upper() print(uppercased) ``` 3. **小写转换** 同样地,`.str.lower()` 方法用于将字符串转为小写。 4. **首字母大写** 使用 `.str.capitalize()` 或者 `.str.title()` 来实现首字母大写的功能。 #### 子串提取与替换 1. **子串匹配** 利用 `.str.contains(pattern)` 查找是否包含特定模式。 ```python contains_a = s.str.contains('a') print(contains_a) ``` 2. **分割字符串** `.str.split(pat=None, n=-1, expand=False)` 是一种常见的字符串拆分方法。 ```python split_result = s.str.split('') print(split_result) ``` 3. **替换子串** 替换指定部分可以通过 `.str.replace(old, new[, n])` 实现。 ```python replaced = s.str.replace('an', '') print(replaced) ``` #### 正则表达式支持 除了基本的字符串操作外,Pandas 还允许结合正则表达式进行复杂模式匹配和替换。例如: - `.str.extract(r'pattern')`: 抽取符合正则表达式的部分内容。 - `.str.findall(r'pattern')`: 找到所有符合条件的部分并返回列表形式。 #### 高级应用实例 假设有一个 DataFrame 如下所示: ```python df = pd.DataFrame({'name': ['John Doe', 'Jane Smith', np.nan], 'email': ['john.doe@example.com', 'jane.smith@sample.org', None]}) print(df) ``` 我们可以利用上述提到的方法完成一些实际任务,比如分离名字字段或者验证邮箱地址的有效性等。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值