首页 > 解决方案 > 当您不知道确切位置时,如何在 DF 中对字符串的一部分进行切片?

问题描述

我正在为切片而苦苦挣扎。我认为这通常很容易并且我理解它,但是当涉及到以下情况时,我的想法不起作用。

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

问题看起来像这样:

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

2.这个字符串不同,取决于每一行,但是,它总是从同一个结构开始 - 比如说:“¯main_”

3.通常在“¯main_”之后,有一些数字(它不同)但是长度总是相同的(9个数字)

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

5.有时在这个带有“¯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.它不能正常工作

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

标签: pythonpandasdata-sciencedata-scrubbing

解决方案


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

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

推荐阅读