我有一个表格文件,如下所示:
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
以前的回复已经把人们引到了熊猫DataFrame上,但是我并没有运气使用这些回复来提供帮助。大家将不胜感激,欢呼。
我曾经尝试过(但是这只能隔离特定的K0行。
df = pd.read_csv("eggnog.txt", delimiter="\t", names=["#query_name", "KEGG_KOs"])
print(df.loc[df['KEGG_KOs'] == 'K00240'])
答案 0 :(得分:2)
将boolean indexing
的startswith
或regex
的{{3}}用作字符串^
和参数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)]
答案 1 :(得分:0)
您可以将open用作读取然后写入。假设原始文件另存为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()