当您不知道确切位置时如何在 DF 中分割字符串的一部分?

How to slice a part of a string in DF when you don't know exact position?

我正在努力切片。我觉得一般来说很容易,我也能理解,但是当遇到下面的情况时,我的想法就不行了。

情况: 在我的 DF 专栏之一中,我想在所有行中删除一些有时出现有时不出现的字符串。

问题是这样的:

1.I 不知道这个字符串开始的确切位置(在每一行中它可能是不同的

2.This 字符串各不相同,具体取决于每一行,但是,它总是从相同的结构开始——比方说:“¯main_”

3.After "¯main_" 通常,有一些数字(不同)但是长度总是相同的(9 个数字)

4.I 已经在拆分之后,我有大约 40 列(每列都有类似的问题)。这就是为什么我正在寻找一些更有效的方法来解决它,然后拆分,再生成 ~40 列,然后删除它们。

5.Sometimes 在这个带有“¯main_”的字符串之后,我想在同一列中保留一些额外的字符串。

示例:

Column1
A1-19
B2-52
C3-1245¯main_123456789
D4
Z89028
F7¯main_123456789,Z241

寻找这样的结果:

Column1
A1-19
B2-52
C3-1245
D4
Z89028
F7,Z241

目前我准备的最好的方案:

a = test.find("¯")
b = a+14
df[0].str.slice(start = a, stop = b)

但是:

1.It 无法正常工作

2.And 我知道 test.find() returns -1 找不到字符。我不知道如何摆脱它——写一个循环?我相信存在一些更好(更有效)的解决方案。然而,经过几个小时的寻找,我决定寻求帮助。

按所有列循环,按位置拆分并将提取的字符串按位置追加到辅助列表,最后分配回列:

print (df)
                   Column1
0                      NaN
1                    B2-52
2  C3-1245¯main_123456789
3                       D4
4                   Z89028
5  F7¯main_123456789,Z241

for c in df.columns:
    out = []
    for x in df[c]:
        if x == x:
            p = x.find('¯')
            if p != -1:
                out.append(x[:p] + x[p+14:])
            else:
                out.append(x)
        else:
            out.append(x)
    df[c] = out

print (df)
     Column1
0        NaN
1      B2-52
2  C3-1245Â9
3         D4
4     Z89028
5  F7Â9,Z241