1

データを転置しようとしていますが、zip 関数は完全に機能します。最長のリストを見つけて、ループを通過したすべてのリストに適用するため、多くの空白が発生します。

これは私のコードです:

Read_Data = inputdata.readlines()
Length_Data = len(Read_Data)
for a in range(Length_Data):
   split_data = Read_Data[a].split(',')

   zipper = zip(split_data)
   print zipper

これにより、次の出力が得られます (これは、はるかに大きなデータセットからのリストの 1 つの例にすぎません)。

[('Abagrotis alternata',), ('Bignoniaceae',), ('Cruciferae',), ('Ericaceae',), ('Fagaceae',), ('Juglandaceae',), ('Oleaceae',), ('Pinaceae',), ('Rosaceae',), ('Solanaceae',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('',), ('\n',)]

これらのリストを何千も作成するデータがたくさんあります。すべてのリストで発生する空白または '' を削除する方法はありますか? 助けてくれてありがとう

私はそれを間違っていたので、これは私のサンプルデータです

**Lep. Species**          **Column**       **Column**    **Column**   
Abablemma brimleyana        Algae               
Abagrotis alternata         Bignoniaceae    Cruciferae     Ericaceae          
Abagrotis anchocelioides    Ericaceae       Rosaceae            
Abagrotis brunneipennis     Rosaceae        Ericaceae           
Abagrotis cryptica          Rosaceae        Salicaceae          
Abagrotis cupida            Ericaceae       Rosaceae       Salicaceae       
Abagrotis magnicupida       Asteraceae      Caryophyllaceae 

これは、出力を次のように表示したいものです

**Lep. Species**             **Column**
Abablemma brimleyana            Algae   
Abagrotis alternata             Bignoniaceae
Abagrotis alternata             Cruciferae
Abagrotis alternata             Ericaceae
Abagrotis anchocelioides        Ericaceae
Abagrotis anchocelioides        Rosaceae

等々。

思った以上に助けが必要だと思います。もう一度助けてくれてありがとう

4

5 に答える 5

3

CSV ファイルの行と列を入れ替えようとしている場合は、間違った方法で行っています。

代わりにこれを使用してください:

import csv

by_column = zip(*csv.reader(inputdata))

by_columnリストのリストになり、ネストされた各リストはinputdataファイルオブジェクトの列になります。

一度に1 つの行のみを圧縮しており、空の文字列のタプルは単に空の列です。

更新を見て、本当にやりたいことは行をスライスすることだけです。

import csv

with open('somefilename.csv', 'rb') as inputfile:
    reader = csv.reader(inputfile)
    for row in reader:
        row = row[:2]
        # process `row` further. It now only contains the first 2 columns.
于 2013-07-25T16:29:25.933 に答える
1

zip関数の仕組みを誤解していると思います。複数のリストを取り、タプルのリストを返します。例えば、

zipper = zip(["a", "b", "c"], [1, 2, 3])
print zipper

出力します

[("a", 1), ("b", 2), ("c", 3)]

zip単一のリストのみで使用しています。したがって、結果は、それぞれが 1 つの要素しか持たないタプルのリストになります。

zipデータの列と行を転置するために元の問題を解決するために使用しないことをお勧めします。それらを転置しようとする前に、それらの列と行を表現する方法を最初に理解する必要があります。

于 2013-07-25T16:30:12.107 に答える