2016-10-12 16 views
0

私はcsvファイルをインポートして処理して最終的に出力すると、出力csvファイルの列の順序が元のものと異なる場合があります。例:pythonは出力のCSVファイルの列の順序を保持します

dct={} 
dct['a']=[1,2,3,4] 
dct['b']=[5,6,7,8] 
dct['c']=[9,10,11,12] 

header = dct.keys() 
rows=pd.DataFrame(dct).to_dict('records') 

with open('outTest.csv', 'wb') as f: 
    f.write(','.join(header)) 
    f.write('\n') 
    for data in rows: 
     f.write(",".join(str(data[h]) for h in header)) 
     f.write('\n') 

元csvファイルのようなある:

a,c,b 
1,9,5 
2,10,6 
3,11,7 
4,12,8 

私は、出力のように、列の順序固定したいと思いながら:

a,b,c 
1,5,9 
2,6,10 
3,7,11 
4,8,12 

と私が見つけた答えはほとんどがpandasに関連していますが、これを別の方法で解決できるかどうかは疑問です。

ご協力いただきありがとうございます。代わりにdct={}

答えて

3

ちょうどこの操作を行います。

from collections import OrderedDict 
dct = OrderedDict() 

キーはあなたがそれらを定義するのと同じ順序で並べられます。

比較試験:

from collections import OrderedDict 
dct = OrderedDict() 
dct['a']=[1,2,3,4] 
dct['b']=[5,6,7,8] 
dct['c']=[9,10,11,12] 

stddct = dict(dct) # create a standard dictionary 

print(stddct.keys()) # "wrong" order 
print(dct.keys())  # deterministic order 

結果:

['a', 'c', 'b'] 
['a', 'b', 'c'] 
+0

ご協力いただきありがとうございます。問題ありません – LancelotHolmes

1

OrderedDict代わりdictionaryのを使用してみてください。 OrderedDictcollectionsモジュールの一部です。

文書番号:link

関連する問題