pandas将某一行设置为列索引(python)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas将某一行设置为列索引(python)相关的知识,希望对你有一定的参考价值。

参考技术A

b[b.['state']=='ohio'].index

In [36]: list(df['state']).index('ohio')

Out[36]: 0

 In [37]: list(df['state']).index('nevada')

Out[37]: 1

访问某一列可以通过b['state']和b.state这两种方法进行,但是输出的pandas里面的Series这种数据类型,因此b['state'].index()返回Index([0,1], dtype=object)。

因为数据分析知某个值并不是非常重要,所以没有直接输出索引值的函数,可以通过query()函数,b.query('state == "obio"'),输出含有ohio的行自然也就知道索引。

扩展资料:

索引是为了加速对表中数据行的检索而创建的一种分散的存储结构。索引是针对表而建立的,它是由数据页面以外的索引页面组成的,每个索引页面中的行都会含有逻辑指针,以便加速检索物理数据。

在数据库关系图中,可以在选定表的“索引/键”属性页中创建、编辑或删除每个索引类型。当保存索引所附加到的表,或保存该表所在的关系图时,索引将保存在数据库中。

在数据库系统中建立索引主要有以下作用:

(1)快速取数据;

(2)保证数据记录的唯一性;

(3)实现表与表之间的参照完整性;

(4)在使用ORDER by、group by子句进行数据检索时,利用索引可以减少排序和分组的时间。

参考资料来源:百度百科-索引

Python Pandas:从多级列索引中删除一列?

【中文标题】Python Pandas:从多级列索引中删除一列?【英文标题】:Python Pandas: drop a column from a multi-level column index? 【发布时间】:2014-09-27 22:10:56 【问题描述】:

我有一个这样的多级列表:

    a
   ---+---+---
    b | c | f
--+---+---+---
0 | 1 | 2 | 7
1 | 3 | 4 | 9

如何按名称删除列“c”?看起来像这样:

    a
   ---+---
    b | f
--+---+---
0 | 1 | 7
1 | 3 | 9

我试过了:

del df['c']

但我得到以下错误,这是有道理的:

KeyError: '键长度 (1) 大于 MultiIndex lexsort depth (0)'

【问题讨论】:

【参考方案1】:

对于多索引,我们必须使用元组指定列才能删除特定列,或者指定级别以删除该索引级别上具有该键的所有列。

而不是说drop column 'c'说drop ('a','c')如下图:

df.drop(('a', 'c'), axis = 1, inplace = True)

或者如下图指定级别

df.drop('c', axis = 1, level = 1)

让我们做一个简单的 df 来演示:

>>> cols = pd.MultiIndex.from_tuples([("a", "b"), ("a", "c"),
...                                   ("a", "f"), ('x', 'c'),('x', 'f')])
>>> df = pd.DataFrame([[1,3, 7, 21, 8], [2, 4, 9, 21, 8]], columns=cols)
>>> df
   a         x   
   b  c  f   c  f
0  1  3  7  21  8
1  2  4  9  21  8

下面是如何从“a”中删除“c”

>>> df.drop(('a', 'c'), axis = 1)
   a      x   
   b  f   c  f
0  1  7  21  8
1  2  9  21  8

使用三级索引,然后将该键包含在元组中以从底层删除,例如('a','c','k')

使用单个值作为索引,就像您所做的那样,它默认搜索***索引以查找匹配项,并删除该索引上的匹配项,或者如果键不在索引中,则抛出错误,就像您发现的那样。

所以在我的例子中,告诉它只删除“x”就可以了

>>> df.drop('x', axis = 1)
   a      
   b  c  f
0  1  3  7
1  2  4  9

要删除具有第二个索引“c”的所有列,然后指定级别

>>> df.drop('c', axis = 1, level = 1)
   a     x
   b  f  f
0  1  7  8
1  2  9  8

【讨论】:

【参考方案2】:

已解决:

df.drop('c', axis=1, level=1)

【讨论】:

尽管 DataFrame 似乎不再包含 c 列,但当我查询 df.columns 时,已删除的列索引会显示出来。 我也遇到了同样的问题,你找到解决办法了吗? 我想我找到了罪魁祸首。级别是FrozenList,因此不会被此操作触及。您可以使用df.columns.remove_unused_levels() 获取最新索引。 Tnx,@KevinWittek。这是一个 sn-p 来展示它是如何工作的:cols = pd.MultiIndex.from_tuples( [("a", "b"), ("a", "c"), ("a", "f"), ("x", "c"), ("x", "f")] ) df = pd.DataFrame([[1, 3, 7, 21, 8], [2, 4, 9, 21, 8]], columns=cols) df.drop(["x"], inplace=True, axis=1, level=0) df.columns.remove_unused_levels().levels[0]

以上是关于pandas将某一行设置为列索引(python)的主要内容,如果未能解决你的问题,请参考以下文章

pandas读取csv数据header参数指定作为列索引的行索引列表形成复合(多层)列索引使用reset_index函数把行索引重置为列数据(level参数设置将原行索引中的指定层转化为列数据)

pandas读取csv数据header参数指定作为列索引的行索引列表形成复合(多层)列索引使用reset_index函数把行索引重置为列数据(level参数设置将原行索引中的指定层转化为列数据)

在 python pandas 中将级别附加到列索引

pandas使用read_csv函数读取csv数据sort_index函数基于多层列索引对数据排序(设置axis参数指定使用列索引对数据排序)

pandas使用read_csv函数读取csv数据sort_index函数基于多层列索引对数据排序(设置axis参数指定使用列索引对数据排序)

Python Pandas:从多级列索引中删除一列?