我有一个包含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
由于
答案 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