首页 > 解决方案 > 熊猫列的字符串替换

问题描述

我有一个数据框,例如:

col1

OK.1:177788-1000(+):Genus_species
OK.1:177788-2000(+):Genus_species
OK.1:177788-3000(+):Genus_species
OK.1:177788-3000(+):Genus_species

我想得到:

OK.1_177788-1000_+__Genus_species
OK.1_177788-2000_+__Genus_species
OK.1_177788-3000_+__Genus_species
OK.1_177788-3000_+__Genus_species

instread 但我真的不知道如何在 re.sub 一行中做到这一点,例如我尝试过:

df['col1'].replace(to_replace="\(", value=r"_", regex=True)
df['col1'].replace(to_replace="\)", value=r"_", regex=True)
df['col1'].replace(to_replace="\:", value=r"_", regex=True)

但我正在寻找更智能的东西。

谢谢您的帮助。

标签: pythonstringpandasreplacesplit

解决方案


假设您的数据框都是字符串, str.replace 应该可以做到不需要正则表达式。

df = df.col1.str.replace('(+):', '_+__', regex=False)

regex = False在此处设置以表明您正在寻找这些字符串文字而不是其正则表达式。

例子

import pandas as pd
import numpy as np

df = pd.DataFrame({'col1': ['OK.1:177788-1000(+):Genus_species', 'OK.1:177788-2000(+):Genus_species']})

输出:

                             col1
0  OK.1:177788-1000(+):Genus_species
1  OK.1:177788-2000(+):Genus_species

然后使用

df = df.col1.str.replace('(+):', '_+__', regex=False)

输出:

                         col1
0    OK.1:177788-1000_+__Genus_species
1    OK.1:177788-2000_+__Genus_species

推荐阅读