当我尝试使用标题保存矩阵时,第一行会出现哈希标记和空格(#):
输入:
np.savetxt(filename,data, fmt='%i %i %i %i %s',delimiter='\t',header="a\tb\tc\td\te")
Run Code Online (Sandbox Code Playgroud)
输出:
# a b c d e
0 0 0 0 bla
0 0 0 0 bla
1 1 1 1 bla
1 1 1 1 bla
Run Code Online (Sandbox Code Playgroud)
任何暗示为什么?我怎么能删除它?
我有一个FASTA文件,可以很容易地对其进行解析SeqIO.parse。
我对提取序列ID和序列长度感兴趣。我用这些行来做,但是我觉得它太重了(两次迭代,转换等)。
from Bio import SeqIO
import pandas as pd
# parse sequence fasta file
identifiers = [seq_record.id for seq_record in SeqIO.parse("sequence.fasta",
"fasta")]
lengths = [len(seq_record.seq) for seq_record in SeqIO.parse("sequence.fasta",
"fasta")]
#converting lists to pandas Series
s1 = Series(identifiers, name='ID')
s2 = Series(lengths, name='length')
#Gathering Series into a pandas DataFrame and rename index as ID column
Qfasta = DataFrame(dict(ID=s1, length=s2)).set_index(['ID'])
Run Code Online (Sandbox Code Playgroud)
我只需要一个迭代就可以做到,但是我得到了一个字典:
records = SeqIO.parse(fastaFile, 'fasta')
Run Code Online (Sandbox Code Playgroud)
我不知怎么DataFrame.from_dict去上班...
我的目标是迭代FASTA文件,并DataFrame在每次迭代中获取ID和序列长度。
这是一份简短的FASTA文件,供那些需要帮助的人使用。
我已经尝试使用Ned Batchelder代码按人类顺序排序NumPy矩阵,正如以下帖子中提出的那样:
代码在一维数组上运行,命令为:
print (sorted(a, key=natural_keys))
Run Code Online (Sandbox Code Playgroud)
现在,我的问题是我的数据是一个10列矩阵,我想根据一列对它进行排序(比方说MyColumn).我找不到修改代码的方法来打印根据这个列排序的整个矩阵.我能想到的就是:
print (sorted(a['MyColumn'], key=natural_keys))
Run Code Online (Sandbox Code Playgroud)
但是,当然,只会MyColumn在输出中显示,尽管它已正确排序......
有没有办法打印整个Matrix?
这是我用来加载数组的命令(我将原始的imputfile简化为3列数组):
data = np.loadtxt(inputfile, dtype={'names': ('ID', 'MyColumn', 'length'),
'formats': ('int32', 'S40', 'int32')},skiprows=1, delimiter='\t')
ID MyColumn length
164967 BFT_job13_q1_type2 426
197388 BFT_job8_q0_type2 244
164967 BFT_job13_q0_type1 944
72406 BFT_job1_q0_type3 696
Run Code Online (Sandbox Code Playgroud)
以下是输出理想情况:
ID MyColumn length
72406 BFT_job1_q0_type3 696
197388 BFT_job8_q0_type2 244
164967 BFT_job13_q0_type1 944
164967 BFT_job13_q1_type2 426
Run Code Online (Sandbox Code Playgroud) 我有这个xml输入文件:
<?xml version="1.0"?>
<zero>
<First>
<second>
<third-num>1</third-num>
<third-def>object001</third-def>
<third-len>458</third-len>
</second>
<second>
<third-num>2</third-num>
<third-def>object002</third-def>
<third-len>426</third-len>
</second>
<second>
<third-num>3</third-num>
<third-def>object003</third-def>
<third-len>998</third-len>
</second>
</First>
</zero>
Run Code Online (Sandbox Code Playgroud)
我的目标是删除任何<third-def>不是值的第二级.为此,我写了这段代码:
try:
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET
inputfile='inputfile.xml'
tree = ET.parse(inputfile)
root = tree.getroot()
elem = tree.find('First')
for elem2 in tree.iter(tag='second'):
if elem2.find('third-def').text == 'object001':
pass
else:
elem.remove(elem2)
#elem2.clear()
Run Code Online (Sandbox Code Playgroud)
我的问题是elem.remove(elem2).它会跳过其他所有第二级.以下是此代码的输出:
<?xml version="1.0" ?>
<zero>
<First>
<second>
<third-num>1</third-num>
<third-def>object001</third-def>
<third-len>458</third-len>
</second>
<second>
<third-num>3</third-num>
<third-def>object003</third-def>
<third-len>998</third-len>
</second>
</First>
</zero>
Run Code Online (Sandbox Code Playgroud)
现在,如果我取消注释该elem2.clear() …
我们可以使用.idxmax来获取数据帧(df)的最大值。我的问题是我有一个包含多列(超过 10 个)的 df,其中一列具有相同值的标识符。我需要提取具有最大值的标识符:
>df
Run Code Online (Sandbox Code Playgroud)id value a 0 b 1 b 1 c 0 c 2 c 1
现在,这就是我想要的:
>df
Run Code Online (Sandbox Code Playgroud)id value a 0 b 1 c 2
我试图通过使用来获得它df.groupy(['id']),但这有点棘手:
df.groupby(["id"]).ix[df['value'].idxmax()]
当然,那是行不通的。我担心我没有走在正确的道路上,所以我想我会问你们!谢谢!