使用 python 在字符串上滑动 window
Sliding window over a string using python
作为课程练习的一部分,我正在处理一个数据集,但卡在了一个特定的步骤。我已经尝试使用 R,但我希望在 python 中做同样的事情。我对 python 比较陌生,因此需要帮助。
数据集由一个名称为 'Seq' 的列组成,其中包含 seq(5000+) 条记录。我还有另一列名称 'MainSeq',其中包含子字符串 seq 值。我需要根据给定的起始位置检查 MainSeq 上是否存在 seq,然后在 seq 的每个字母前后打印 7 个字母。 IE。
我在 col 'MainSeq' 中有一个值为 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'。
Col 'Seq' 包含值 JKLMNO
J= 10 和 O= 15
的起始位置
我需要创建一个新列,使其从 J 到 O 的起始字母前后各有 7 个字母,即总长度为 15
CDEFGHI**J**KLMNOPQ
DEFGHIJ**K**LMNOPQR
EFGHIJK**L**MNOPQRS
FGHIJKL**M**NOPQRST
GHIJKLM**N**OPQRSTU
HIJKLMN**O**PQRSTUV
我知道在特定序列上应用逻辑。但是因为我有大约 5000 多条 seq 记录,我需要想办法在所有 seq 记录上应用相同的方法。
seq = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
i = seq.index('J')
j = seq.index('O')
value = 7
for mid in range(i, 1+j):
print(seq[mid-value:mid+value+1])
我不确定这是否会完全满足您的要求,您并没有真正提供大量数据来进行测试,但它可能会起作用或者至少给您一个开始。
import pandas as pd
df = pd.DataFrame({'MainSeq':['ABCDEFGHIJKLMNOPQRSTUVWZYZ','ABCDEFGHIJKLMNOPQRSTUVWZYZ'], 'Seq':'JKLMNO'})
def get_sequences(seq, letters, value):
sequences = [seq[seq.index(letter)-value:seq.index(letter)+value+1] for letter in letters]
return sequences
df['new_seq'] = df.apply(lambda row : get_sequences(row['MainSeq'], row['Seq'], 7), axis = 1)
df = df.explode('new_seq')
print(df)
作为课程练习的一部分,我正在处理一个数据集,但卡在了一个特定的步骤。我已经尝试使用 R,但我希望在 python 中做同样的事情。我对 python 比较陌生,因此需要帮助。
数据集由一个名称为 'Seq' 的列组成,其中包含 seq(5000+) 条记录。我还有另一列名称 'MainSeq',其中包含子字符串 seq 值。我需要根据给定的起始位置检查 MainSeq 上是否存在 seq,然后在 seq 的每个字母前后打印 7 个字母。 IE。 我在 col 'MainSeq' 中有一个值为 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'。 Col 'Seq' 包含值 JKLMNO J= 10 和 O= 15
的起始位置我需要创建一个新列,使其从 J 到 O 的起始字母前后各有 7 个字母,即总长度为 15
CDEFGHI**J**KLMNOPQ
DEFGHIJ**K**LMNOPQR
EFGHIJK**L**MNOPQRS
FGHIJKL**M**NOPQRST
GHIJKLM**N**OPQRSTU
HIJKLMN**O**PQRSTUV
我知道在特定序列上应用逻辑。但是因为我有大约 5000 多条 seq 记录,我需要想办法在所有 seq 记录上应用相同的方法。
seq = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
i = seq.index('J')
j = seq.index('O')
value = 7
for mid in range(i, 1+j):
print(seq[mid-value:mid+value+1])
我不确定这是否会完全满足您的要求,您并没有真正提供大量数据来进行测试,但它可能会起作用或者至少给您一个开始。
import pandas as pd
df = pd.DataFrame({'MainSeq':['ABCDEFGHIJKLMNOPQRSTUVWZYZ','ABCDEFGHIJKLMNOPQRSTUVWZYZ'], 'Seq':'JKLMNO'})
def get_sequences(seq, letters, value):
sequences = [seq[seq.index(letter)-value:seq.index(letter)+value+1] for letter in letters]
return sequences
df['new_seq'] = df.apply(lambda row : get_sequences(row['MainSeq'], row['Seq'], 7), axis = 1)
df = df.explode('new_seq')
print(df)