2015-10-19 10 views
5

I以上25000行と15列から成るデータフレームにCSVファイルからデータを読んでいると私は(最も左含む - >インデックス)すべての行を移動する必要がある1つの列を私は空のインデックスを取得し、それを整数で埋めることができるようになります。ただし、列の名前は同じ場所にとどまる必要があります。ですから、基本的には、列名以外のすべてを1つ右に移動する必要があります。移動列が

enter image description here

私はそれインデックスを再作成しようとしましたが、エラーが発生しました:

ValueError: cannot reindex from a duplicate axis 

はこれを行う方法はありますか?そして、あなたが必要として、それらを並べ替えることができ

colnames = df.columns.tolist() 

:でリストに自分のデータフレームの列の名前を取るよりも、

df['new'] = df.index 

答えて

4

は、私が最初に新しい列を追加しますたとえば、順序を変更して最後の「新しい」列を最初に取得し、残りを1つ右の位置に移動します。

colnames = colnames[-1:] + colnames[:-1] 

と再割り当て:パンダで

df = df[colnames] 
+0

私は今、それがより明確だ、それを更新しました。 – puk789

9

を使用すると、2つのデータフレームの間の結合でくださいしない限り、あなただけの、右に列を作成することができます。その後、あなたは好きなように再配置することができます。

import pandas as pd 

df = pd.read_csv('data.csv', header=None, names = ['A','B','C']) 

print(df) 

    A B C 
0 1 2 3 
1 4 5 6 
2 7 8 9 
3 10 11 12 

df['D'] = pd.np.nan # this creates an empty series 
        # and appends to the right 

print(df) 

    A B C D 
0 1 2 3 NaN 
1 4 5 6 NaN 
2 7 8 9 NaN 
3 10 11 12 NaN 

df = df[['D','A','B','C']] # rearrange as you like 

print(df) 

    D A B C 
0 NaN 1 2 3 
1 NaN 4 5 6 
2 NaN 7 8 9 
3 NaN 10 11 12 
+0

'のDF [ 'D'] = pd.np.nan'は、代わりに' DF [ 'D'] = pd.Series(データ=なし、インデックス= df.index) 'で十分であろうか? – Zero

+0

ありがとうございました。 – Leb

+0

私はそれを更新しました、今より明らかです。 – puk789

0
df = YourDataFrame 
col = "Your Column You Want To Move To The Start Of YourDataFrame" 
df = pd.concat([df[col],df.drop(col,axis=1)], axis=1) 
関連する問題