假设我的数据框的多索引列名称如下所示:
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'下的列名称?从字符串到浮点数,而不修改'',以获得以下内容?
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'将有数千个名称应该是浮点数的列(它们代表光谱仪的波长),数据框中的数据代表多个不同的观察结果。
谢谢!
答案 0 :(得分: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'])