Удалить строки, которые не содержат определенный текст - Python - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть табличный файл, который выглядит следующим образом:

query_name      KEGG_KOs
PROKKA_00013    NaN
PROKKA_00015    bactNOG[38]
PROKKA_00017    NA|NA|NA
PROKKA_00019    K00240
PROKKA_00020    K00246
PROKKA_00022    K02887

Я пытаюсь создать сценарий для просмотра и удаления всей строки, если столбец 2 ('KEGG_KOs') не начинается с'K0'.Я пытаюсь создать вывод:

query_name     KEGG_KOs
PROKKA_00019    K00240
PROKKA_00020    K00246
PROKKA_00022    K02887

В предыдущих ответах люди ссылались на pandas DataFrame, но мне не повезло, используя эти ответы, чтобы помочь.Любой был бы очень признателен, ура.

Я пытался (но это только изолирует определенную линию K0.

df = pd.read_csv("eggnog.txt", delimiter="\t", names=["#query_name", "KEGG_KOs"])
print(df.loc[df['KEGG_KOs'] == 'K00240'])

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

вы можете использовать открыть как читать, а затем написать.предположим, что исходный файл сохранен как old.txt, а обновленный файл будет сохранен как new.txt

text = ''
with open("old.txt", 'r') as org:
    next(org)
    for line in org:
        data = line.strip().split()
        if data[1].startswith("K0"):
            text = text + data[0] + " "+ data[1] + '\n'

w = open('new.txt', 'w')
w.write("query_name"+" "+ "KEGG_KOs\n")
w.write(text)
w.close()
0 голосов
/ 24 сентября 2018

Используйте boolean indexing с startswith или contains с regex для начала строки ^ и параметром na=False,потому что пропущенные значения:

df1 = df[df['KEGG_KOs'].str.startswith('K0', na=False)]
print (df1)
     query_name KEGG_KOs
3  PROKKA_00019   K00240
4  PROKKA_00020   K00246
5  PROKKA_00022   K02887

Или:

df1 = df[df['KEGG_KOs'].str.contains('^K0', na=False)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...