2016-07-28 62 views
0

假設我有一個多指標列名的數據幀,看起來像這樣大熊貓:改變一些,但不是全部,多指標列名

 A     B 
    '1.5' '2.3' '8.4' b1 
r1 1  2  3  a 
r2 4  5  6  b 
r3 7  8  9  10 

我怎麼會「A」下,更改從剛剛列名字符串浮動,而不修改'B1',以獲得以下?

 A     B 
    1.5 2.3 8.4 b1 
r1 1  2  3  a 
r2 4  5  6  b 
r3 7  8  9  10 

在實際使用情況下,在「A」將有數千列的具有名稱應該是浮標(它們代表的光譜儀的波長)和所述數據在所述數據幀代表多個不同的觀測。

謝謝!

回答

1
# build the DataFrame (sideways at first, then transposed) 
arrays = [['A','A','A','B'],['1.5', '2.3', '8.4', 'b1']] 
tuples = list(zip(*arrays)) 

data1 = np.array([[1,2,3,'a'], [4,5,6,'b'], [7,8,9,10]]) 
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second']) 
df = pd.DataFrame(data1.T, index=index).T 

打印df.columns給出了現有的列名稱。

Out[84]: 
MultiIndex(levels=[[u'A', u'B'], [u'1.5', u'2.3', u'8.4', u'b1']], 
     labels=[[0, 0, 0, 1], [0, 1, 2, 3]], 
     names=[u'first', u'second']) 

現在改列名

# make new column titles (probably more pythonic ways to do this) 
A_cols = [float(i) for i in df['A'].columns] 
B_cols = [i for i in df['B'].columns]  
cols = A_cols + B_cols 

# set levels 
levels = [df.columns.levels[0],cols] 
df.columns.set_levels(levels,inplace=True) 

提供了以下輸出

Out[86]: 
MultiIndex(levels=[[u'A', u'B'], [1.5, 2.3, 8.4, u'b1']], 
     labels=[[0, 0, 0, 1], [0, 1, 2, 3]], 
     names=[u'first', u'second']) 
+0

啊,謝謝!我應該儘可能使用列表來將float和string列標籤保存在一個地方。 – rba

+0

沒問題。如果它適合你,請不要忘記標記答案是正確的! – benten

+0

哎呀,我以爲我已經這麼做了!謝謝! – rba

相關問題