2015-10-19 85 views
5

我已经从csv文件读取数据到一个数据框中,该数据框包含25000多行和15列,我需要将所有行(包括最左侧 - >索引)的一列移动到对,这样我就可以得到一个空索引并且能够用整数填充它。但是,列的名称应该保持在同一个地方。所以,基本上我需要将除列名之外的所有内容都移到右边。在Pandas数据框中移动列

enter image description here

我试图重新索引,但得到了一个错误:

ValueError: cannot reindex from a duplicate axis 

有没有办法做到这一点?

回答

4

我会先用添加新列:

df['new'] = df.index 

不是把你的数据框的列的名称列表中有:

colnames = df.columns.tolist() 

然后,你可以重新排列它们,因为你需要,例如更改订单,以便首先获得最后一个“新”列,并将剩余的一个位置移动到右侧:

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

并重新分配:

df = df[colnames] 
+0

我已经更新了它,现在它更清楚。 – puk789

9

在大熊猫只能创建一个列到右边,除非你做两个数据帧之间的连接。然后,你可以重新安排,但你喜欢。

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(data = None,index = 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)