44

Python Pandasを使用して読み取りおよび書き込みを行うときに、csvファイルの列の順序を保持する方法はありますか?たとえば、このコードでは

import pandas as pd

data = pd.read_csv(filename)
data.to_csv(filename)

列が保持されないため、出力ファイルが異なる場合があります。

4

3 に答える 3

38

現在のバージョンのPandas( '0.11.0')にはバグがあるようです。これは、MattiJohnの回答が機能しないことを意味します。ファイルに書き込む列を指定すると、それらはアルファベット順に書き込まれますが、列のリストに従って単純にラベルが付け直されます。たとえば、次のコードは次のとおりです。

import pandas
dfdict={}
dfdict["a"]=[1,2,3,4]
dfdict["b"]=[5,6,7,8]
dfdict["c"]=[9,10,11,12]
df=pandas.DataFrame(dfdict)
df.to_csv("dfTest.txt","\t",header=True,cols=["b","a","c"])

この(誤った)出力になります:

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

次のコマンドを実行して、インストールしたパンダのバージョンを確認できます。

pandas.version.version

to_csvのドキュメントはこちら

実際、これは既知のバグのようで、次のリリース(0.11.1)で修正される予定です。

https://github.com/pydata/pandas/issues/3489

更新:パンダの新しいリリースはまだありませんが、ここで説明されている回避策があり、別のバージョンのパンダを使用する必要はありません。

github.com/pydata/pandas/issues/3454

したがって、上記のコードブロックの最後の行を次のように変更すると、正しく機能します。

df.to_csv("dfTest.txt","\t",header=True,cols=["b","a","c"], engine='python')

更新最近のバージョンのパンダでは、引数「cols」の名前が「columns」に変更され、引数「engine」が廃止された(使用できなくなった)ようです。また、このバグはバージョン0.19.0で修正されています。

于 2013-06-06T09:28:50.193 に答える
24

このようなcsvファイルを読み書きするときは、通常、列の順序を保持する必要がありますが、何らかの理由で列の順序が希望どおりでない場合は、でcolumnsキーワード引数を使用できますto_csv

たとえば、列a、b、c、dのあるcsvがある場合:

data = pd.read_csv(filename)
data.to_csv(filename, columns=['a', 'b', 'c', 'd'])
于 2013-03-27T12:24:29.643 に答える
6

別の回避策はこれを行うことです:

import pandas as pd
data = pd.read_csv(filename)
data2 = df[['A','B','C']]  #put 'A' 'B' 'C' in the desired order
data2.to_csv(filename)
于 2016-01-28T02:22:10.800 に答える