将多个分隔符列拆分为多个列

nov*_*her 4 python pandas

我有一个9列的文件.其中一列保持着这样的字符串

Unique
3:107912234-107912321(-)
4:107913333-107913322(+)
Y:222002110-221002100(+)
MT:34330044-343123232(-)
X:838377373-834121212(+)
Run Code Online (Sandbox Code Playgroud)

〜400,000行,不同的字符串.如何将它分成同一个df中的4个不同的列,df.str(",")如果只有一个分隔符我可以使用,但由于它有不同的分隔符,我迷路了.

预期产量:

chr  start  end  strand
3    107912234 107912321 -
4    107913333 107913322 + 
Y    222002110 221002100 + 
MT   34330044  343123232 -
X    838377373 834121212 +
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 5

你可以使用extract:

df1 = df['Unique'].str.extract("(?P<ch>.*?):(?P<start>\d+)-(?P<end>\d+)\((?P<strand>[-+])", 
                               expand=True)
print (df1)
   ch      start        end strand
0   3  107912234  107912321      -
1   4  107913333  107913322      +
2   Y  222002110  221002100      +
3  MT   34330044  343123232      -
4   X  838377373  834121212      +
Run Code Online (Sandbox Code Playgroud)

感谢A-Za-z的建议 - 如果数据不总是+-strand列中:

df1 = df['Unique'].str.extract("(?P<ch>.*?):(?P<start>\d+)-(?P<end>\d+)\((?P<strand>.*)\)", 
                              expand=True)
print (df1)
   ch      start        end strand
0   3  107912234  107912321      -
1   4  107913333  107913322      +
2   Y  222002110  221002100      +
3  MT   34330044  343123232      -
4   X  838377373  834121212      +
Run Code Online (Sandbox Code Playgroud)

如果需要添加到原始df列,请使用join:

print (df.join(df1))
                     Unique  ch      start        end strand
0  3:107912234-107912321(-)   3  107912234  107912321      -
1  4:107913333-107913322(+)   4  107913333  107913322      +
2  Y:222002110-221002100(+)   Y  222002110  221002100      +
3  MT:34330044-343123232(-)  MT   34330044  343123232      -
4  X:838377373-834121212(+)   X  838377373  834121212      +
Run Code Online (Sandbox Code Playgroud)