重新定义 Pandas DataFrame 对象中的索引
Posted
技术标签:
【中文标题】重新定义 Pandas DataFrame 对象中的索引【英文标题】:Redefining the Index in a Pandas DataFrame object 【发布时间】:2012-05-14 12:21:26 【问题描述】:我正在尝试重新索引 pandas DataFrame
对象,就像这样,
From:
a b c
0 1 2 3
1 10 11 12
2 20 21 22
To :
b c
1 2 3
10 11 12
20 21 22
我将按如下所示进行此操作,但得到了错误的答案。有关如何执行此操作的任何线索?
>>> col = ['a','b','c']
>>> data = DataFrame([[1,2,3],[10,11,12],[20,21,22]],columns=col)
>>> data
a b c
0 1 2 3
1 10 11 12
2 20 21 22
>>> idx2 = data.a.values
>>> idx2
array([ 1, 10, 20], dtype=int64)
>>> data2 = DataFrame(data,index=idx2,columns=col[1:])
>>> data2
b c
1 11 12
10 NaN NaN
20 NaN NaN
知道为什么会这样吗?
【问题讨论】:
因为你正在使用第一个 DF 来构建第二个,这只会得到 idx2 与 data.index 相交的行,即。第 1 行 【参考方案1】:你为什么不简单地使用set_index
方法?
In : col = ['a','b','c']
In : data = DataFrame([[1,2,3],[10,11,12],[20,21,22]],columns=col)
In : data
Out:
a b c
0 1 2 3
1 10 11 12
2 20 21 22
In : data2 = data.set_index('a')
In : data2
Out:
b c
a
1 2 3
10 11 12
20 21 22
【讨论】:
为了去掉索引名,如原例:data2.index.name = None【参考方案2】:如果您不想在索引中出现“a”
在:
col = ['a','b','c']
data = DataFrame([[1,2,3],[10,11,12],[20,21,22]],columns=col)
data
输出:
a b c
0 1 2 3
1 10 11 12
2 20 21 22
在:
data2 = data.set_index('a')
输出:
b c
a
1 2 3
10 11 12
20 21 22
在:
data2.index.name = None
输出:
b c
1 2 3
10 11 12
20 21 22
【讨论】:
第二个 Out 不正确。左侧还有一个未命名的列,包含 0、1、2。【参考方案3】:为避免使用单行索引名称,您可以使用 set_index('a')
和 rename_axis(None)
In [8]: data.set_index('a').rename_axis(None)
Out[8]:
b c
1 2 3
10 11 12
20 21 22
详情
In [9]: data
Out[9]:
a b c
0 1 2 3
1 10 11 12
2 20 21 22
【讨论】:
以上是关于重新定义 Pandas DataFrame 对象中的索引的主要内容,如果未能解决你的问题,请参考以下文章
在 pandas DataFrame 中重新排序 MultiIndex 的级别