2014-10-01 162 views
28

我必須使用的數據有點混亂。它在其數據中包含標題名稱。我如何從現有的熊貓數據框中選擇一行並將其重命名爲列標題?將行轉換爲Pandas DataFrame的列標題,

我想要做的事,如:

header = df[df['old_header_name1'] == 'new_header_name1'] 

df.columns = header 

回答

58
In [21]: df = pd.DataFrame([(1,2,3), ('foo','bar','baz'), (4,5,6)]) 

In [22]: df 
Out[22]: 
    0 1 2 
0 1 2 3 
1 foo bar baz 
2 4 5 6 

設置列標籤等於第2行中的值(索引位置1):

In [23]: df.columns = df.iloc[1] 

刪除第二行:

In [24]: df.reindex(df.index.drop(1)) 
Out[24]: 
1 foo bar baz 
0 1 2 3 
2 4 5 6 
+0

非常感謝您的快速響應!我怎樣才能通過價值來選擇一行來代替索引位置來使它成爲頭部?所以對於你的例子像.. df.columns = df [df [0] =='foo'] – 2014-10-01 17:57:04

+0

問題是可能有不止一行的值爲'「foo」'。解決這個問題的一個方法是明確選擇第一個這樣的行:'df.columns = df.iloc [np.where(df [0] =='foo')[0] [0]]''。 – unutbu 2014-10-01 18:02:44

+0

啊我明白你爲什麼那樣做了。對於我的情況,我知道只有一行的值爲「foo」。所以沒關係。我只是這樣做了,我想這跟你上面給我的那個一樣。 idx_loc = df [df [0] =='foo']。index.tolist()[0] df.columns = df.iloc [idx_loc] – 2014-10-01 18:08:02

7

This works(pandas v'0.19 .2'):

df.rename(columns=df.iloc[0]) 
+0

您可以通過添加'.drop (df.index [0])' – ostrokach 2017-11-23 22:01:26

相關問題