<p>数据处理工具。
这意味着每一行应该包含相同数量的字段。
在CSV输入的情况下,还有一个要求,即字段
每行中的顺序应该是<strong>相同的</strong>。在</p>
<p>但是您的输入文件实际上无法满足这两个要求。在</p>
<p>前2行(可能还有大多数其他行)有7个字段:
<em>超王国,<em>门</em>,<em>类</em>,<em>目</em>,<em>科</em>,<em>属</em>和<em>种</em>。在</p>
<p>第三行包含:
<em>超界,<em>门</em>,<em>亚门</em>,<em>纲</em>,<em>无秩</em>和<em>属</em>。
所以:</p>
<ul>
<li>有<strong>额外的</strong>字段(<em>亚系</em>和<em>无秩</em>)</li>
<li>你没有这样的领域,如<em>秩序</em>,<em>家族</em>和<em>物种</em>。在</li>
</ul>
<p>这不会导致读取csv</em>失败,只是因为字段的数量
不超过前几行中的字段数(总共有6个字段)。在</p>
<p>但真正的问题是在第4行,其中有<strong>10</strong>字段。在</p>
<p>所以“普通”在这里绝不是一个好的选择。
即使设置的列数足以读取所有行,
属性将以难以阅读的方式“分散”在列中。在</p>
<p>任何基于列名分析这些数据的尝试也会失败,
因为每列在不同的行中都有不同的信息。在</p>
<p>另一个问题是,用逗号分隔的数据将包含。
<em>供应细菌王国</em>,即:</p>
<ul>
<li>文本应该是列(属性)<strong>名称</strong></li>
<li>结肠</li>
<li>实际值。在</li>
</ul>
<p>要克服这些问题,请尝试另一种方法来读取输入文件:</p>
<ol>
<li><p>使用<em>Read_csv</em>读取您的输入文件,但作为一个<strong>单个文件</strong>
列(<em>sep</em>设置为未使用的字符)。在</p>
<pre><code>df = pd.read_csv('input.csv', sep='|', names=['col1'])
</code></pre></li>
<li><p>下一步,生成一个可以通过
一个程序是<em>extractall</em>(需要<em>import re</em>):</p>
<pre><code>df2 = df.col1.str.extractall(
r'(?P<name>[A-Z ]+[A-Z]):(?P<value>[A-Z /]+[A-Z])', flags=re.I)\
.reset_index(level=1, drop=True)
</code></pre></li>
</ol>
<p>如果你不擅长正则表达式,读一点关于它们的知识。在</p>
<p>结果是一个包含2列的数据帧:</p>
<ul>
<li><em>name</em>—属性名,例如<em>超级王国</em></li>
<li><em>value</em>属性值,例如<em>细菌</em>。在</li>
</ul>
<p>索引与<em>df</em>中的相同-它是源行号,从<em>0</em>开始。在</p>
<p>对于示例数据,结果如下:</p>
<pre><code> name value
0 superkingdom Bacteria
0 phylum Actinobacteria
0 class Actinobacteria
0 order Corynebacteriales
0 family Corynebacteriaceae
0 genus Corynebacterium
0 species Corynebacterium efficiens
1 superkingdom Bacteria
1 phylum Proteobacteria
1 class Alphaproteobacteria
1 order Rhizobiales
1 family Aurantimonadaceae
1 genus Aurantimonas
1 species Aurantimonas manganoxydans
2 superkingdom Bacteria
2 phylum Proteobacteria
2 subphylum delta/epsilon subdivisions
2 class Deltaproteobacteria
2 no rank unclassified Deltaproteobacteria
2 genus Candidatus Entotheonella
3 superkingdom Bacteria
3 phylum Proteobacteria
3 class Gammaproteobacteria
3 order Pseudomonadales
3 family Pseudomonadaceae
3 genus Pseudomonas
3 species group Pseudomonas syringae group
3 species subgroup Pseudomonas syringae group genomosp
3 species Pseudomonas amygdali
3 no rank Pseudomonas amygdali pv
4 superkingdom Bacteria
4 phylum Actinobacteria
4 class Actinobacteria
4 order Corynebacteriales
4 family Nocardiaceae
4 genus Rhodococcus
4 species Rhodococcus wratislaviensis
5 superkingdom Bacteria
5 phylum Firmicutes
5 class Clostridia
5 order Clostridiales
5 family Peptostreptococcaceae
5 genus Peptoclostridium
5 species Peptoclostridium difficile
</code></pre>
<p>如果您希望将这些数据作为一个表,并将每个<em>名称</em>转换
对于相应的列,运行:</p>
<pre><code>df3 = df2.set_index('name', append=True).unstack(fill_value='')
df3.columns = df3.columns.droplevel()
</code></pre>
<p>看看结果,我认为它会比
任何其他尝试。在</p>