删除python中未知的字符串部分

时间:2017-05-08 03:50:10

标签: python pandas

我有一个包含2列的excel文件。我想删除第2列(C2)中字符串的某些部分。但问题是,由于文件很大,我不知道我要删除的确切名称;但我知道我想保留哪些部分。另一个问题是我要保留的部分只有一个字母,它们也将在我想删除的部分中。以下是一个例子:

The original part is like:(C1 and C2 are columns name)

C1              C2
T1              L_1>K>J>P000RTK>P
T2              K>L>L>PY0BDJS
T3              P>P>P000FTKL>L

I need the results like: I only want to keep the part with one letter and I 
want to remove the rest.

C1              C2
T1              L_1>K>J>P
T2              K>L>L
T3              P>P>L

由于

2 个答案:

答案 0 :(得分:3)

如果您使用pandas DataFrame来读取文件,则可以在DataFrame上使用带有正则表达式的pd.replace()来删除不需要的单元格值。

>> df.replace(">\w{2,}", "", regex=True)

C1  C2
0   T1  L_1>K>J>P
1   T2  K>L>L
2   T3  P>P>L

免责声明:有些情况下我使用的正则表达式可能会失败,例如P000RTK>L_1>K>J>P(感谢@piRSquared指出它)。这是作为示例给出的(使用问题中的值),当使用regex替换时,您需要实现自己的正则表达式(适合您需要的正则表达式)。

答案 1 :(得分:2)

根据您的情况,您只想保留包含一个字母的部分。这意味着您要删除

之类的内容
  • 'P_K':不连续的多个字母
  • 'PK_':连续多个字母

我的策略是按'>'拆分字符串,并过滤掉字母数量超过1的元素

f = lambda x: x.str.count('[A-Za-z]') < 2
s = df.C2.str.split('>', expand=True).stack()
df.assign(C2=s.compress(f).groupby(level=0).apply('>'.join))

   C1         C2
0  T1  L_1>K>J>P
1  T2      K>L>L
2  T3      P>P>L