我有一个文本文件,其中的列由可变数量的空格分隔。是否可以在不进行预处理的情况下直接将该文件作为pandas数据框加载?在pandas文档中,定界符部分说我可以使用一种's*'
构造,但是我无法使用它。
## sample data
head sample.txt
# --- full sequence --- -------------- this domain ------------- hmm coord ali coord env coord
# target name accession tlen query name accession qlen E-value score bias # of c-Evalue i-Evalue score bias from to from to from to acc description of target
#------------------- ---------- ----- -------------------- ---------- ----- --------- ------ ----- --- --- --------- --------- ------ ----- ----- ----- ----- ----- ----- ----- ---- ---------------------
ABC_membrane PF00664.18 275 AAF67494.2_AF170880 - 615 8e-29 100.7 11.4 1 1 3e-32 1e-28 100.4 7.9 3 273 42 313 40 315 0.95 ABC transporter transmembrane region
ABC_tran PF00005.22 118 AAF67494.2_AF170880 - 615 2.6e-20 72.8 0.0 1 1 1.9e-23 6.4e-20 71.5 0.0 1 118 402 527 402 527 0.93 ABC transporter
SMC_N PF02463.14 220 AAF67494.2_AF170880 - 615 3.8e-08 32.7 0.2 1 2 0.0036 12 4.9 0.0 27 40 391 404 383 408 0.86 RecF/RecN/SMC N terminal domain
SMC_N PF02463.14 220 AAF67494.2_AF170880 - 615 3.8e-08 32.7 0.2 2 2 1.8e-09 6.1e-06 25.4 0.0 116 210 461 568 428 575 0.85 RecF/RecN/SMC N terminal domain
AAA_16 PF13191.1 166 AAF67494.2_AF170880 - 615 3.1e-06 27.5 0.3 1 1 2e-09 7e-06 26.4 0.2 20 158 386 544 376 556 0.72 AAA ATPase domain
YceG PF02618.11 297 AAF67495.1_AF170880 - 284 3.4e-64 216.6 0.0 1 1 2.9e-68 4e-64 216.3 0.0 68 296 53 274 29 275 0.85 YceG-like family
Pyr_redox_3 PF13738.1 203 AAF67496.2_AF170880 - 352 2.9e-28 99.1 0.0 1 2 2.8e-30 4.8e-27 95.2 0.0 1 201 4 198 4 200 0.85 Pyridine nucleotide-disulphide oxidoreductase
#load data
from pandas import *
data = read_table('sample.txt', skiprows=3, header=None, sep=" ")
ValueError: Expecting 83 columns, got 91 in row 4
#load data part 2
data = read_table('sample.txt', skiprows=3, header=None, sep="'s*' ")
#this mushes some of the columns into the first column and drops the rest.
X.1
1 ABC_tran PF00005.22 118 AAF67494.2_
2 SMC_N PF02463.14 220 AAF67494.2_
3 SMC_N PF02463.14 220 AAF67494.2_
4 AAA_16 PF13191.1 166 AAF67494.2_
5 YceG PF02618.11 297 AAF67495.1_
6 Pyr_redox_3 PF13738.1 203 AAF67496.2_
7 Pyr_redox_3 PF13738.1 203 AAF67496.2_
8 FMO-like PF00743.14 532 AAF67496.2_
9 FMO-like PF00743.14 532 AAF67496.2_
虽然我可以预处理文件以将空格更改为逗号/制表符,但直接加载它们会很好。
(仅供参考,这是hmmscan程序的* .hmmdomtblout输出)
我认为\
文档中仅缺少一个(也许是因为它在某些时候被解释为转义标记?)毕竟是正则表达式:
In [68]: data = read_table('sample.txt', skiprows=3, header=None, sep=r"\s*")
In [69]: data
Out[69]:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 7 entries, 0 to 6
Data columns:
X.1 7 non-null values
X.2 7 non-null values
X.3 7 non-null values
X.4 7 non-null values
X.5 7 non-null values
X.6 7 non-null values
[...]
X.23 7 non-null values
X.24 7 non-null values
X.25 5 non-null values
X.26 3 non-null values
dtypes: float64(8), int64(10), object(8)
由于@MRAB指出了定界符问题,因此最后几列存在一些问题:
In [73]: data.ix[:,20:]
Out[73]:
X.21 X.22 X.23 X.24 X.25 X.26
0 315 0.95 ABC transporter transmembrane region
1 527 0.93 ABC transporter None None
2 408 0.86 RecF/RecN/SMC N terminal domain
3 575 0.85 RecF/RecN/SMC N terminal domain
4 556 0.72 AAA ATPase domain None
5 275 0.85 YceG-like family None None
6 200 0.85 Pyridine nucleotide-disulphide oxidoreductase None
但这可以在最后修复。
问题内容: 我有一个像这样的电子表格: 我不想手动将列与行交换。是否可以使用熊猫将数据读取到列表中,如下所示: 问题答案: 是的,使用set_index可以创建行索引。 如果未提供,则返回修改后的数据帧。 例:
问题内容: 这是我面临的常见任务:将一个空格分隔的列表分为一个 head 元素和一个包含 tail 元素的数组。例如,给定以下字符串: 我们想要: ..在两个不同的变量中。第一个变量应为字符串,第二个变量为数组。我正在寻找一种做到这一点的 优雅 方法(最好是在Java中)。 问题答案: 对于某些高雅的价值观: 我想不出一种用更少的代码来做到这一点的方法…
问题内容: 我需要通过使用方法从文件中读取数据来创建数据框。但是,分隔符不是很规则:一些列由制表符()分隔,另一些则由空格分隔。此外,某些列可以用2或3个或更多的空格隔开,甚至可以用空格和制表符的组合(例如3个空格,两个制表符然后是1个空格)隔开。 有没有办法告诉熊猫正确对待这些文件? 顺便说一句,如果我使用Python,则不会出现此问题。我用: 而且效果很好。不管字段之间是否有2或3个空格。即使
问题内容: 我有类似的东西 就像 是否有可能使它更像 既然我想要的数据还是文本的? 问题答案: 您可以使用@XmlList使其成为空格分隔的值。 对于以逗号分隔的列表,您将需要使用XmlAdapter。有关XmlAdapter的更多信息,请参见: http://bdoughan.blogspot.com/2010/07/xmladapter-jaxbs-secret-weapon.html
问题内容: 我有以下内容: 打印出此数组中的所有元素可以得到以下信息: 如何通过单词之间至少有一个空格的要求来拆分元素? 换句话说,我希望我的元素是: 问题答案: 使用对空间分割,即使他们都多。 完整示例:http : //ideone.com/CFVr6N 编辑: 如果您还想在选项卡上拆分,请将正则表达式更改为,它将同时检测空格和选项卡。
我有一个看起来像这样的数据集(最多5列-但可以更少) 我试图使用pandas read_表将其读入一个5列数据帧。我想在没有额外按摩的情况下阅读这篇文章。 如果我尝试 我得到一个错误-“列名有5个字段,数据有3个字段”。 有没有办法让熊猫在读取数据的同时为缺失的列填写NaN?