maxframe.dataframe.DataFrame.loc#

property DataFrame.loc#

通过标签或布尔数组访问一组行和列。

.loc[] 主要基于标签,但也可以与布尔数组一起使用。

允许的输入包括:

  • 单个标签,例如 5'a',(注意 5 被解释为索引的 标签,而 不是 索引上的整数位置)。

  • 标签列表或数组,例如 ['a', 'b', 'c']

  • 一个带有标签的切片对象,例如 'a':'f'

    警告

    请注意,与常规的 Python 切片不同,起始和结束位置都包含在内。

  • 与被切片轴长度相同的布尔数组,例如 [True, False, True]

  • 可对齐的布尔 Series。在进行掩码操作前,键的索引将被对齐。

  • 可对齐的 Index。返回的选择的 Index 将是输入本身。

  • 一个接受一个参数(调用的 Series 或 DataFrame)并返回有效索引输出(以上之一)的 callable 函数。

更多信息请参见 通过标签选择

抛出:
  • KeyError -- 如果找不到任何项目。

  • IndexingError -- 如果传递了一个带索引的键,但其索引无法与框架索引对齐。

参见

DataFrame.at

访问一个行/列标签对的单个值。

DataFrame.iloc

通过整数位置访问行和列的组。

DataFrame.xs

从 Series/DataFrame 返回一个横截面(行或列)。

Series.loc

使用标签访问值的组。

示例

获取值

>>> import maxframe.dataframe as md
>>> df = md.DataFrame([[1, 2], [4, 5], [7, 8]],
...      index=['cobra', 'viper', 'sidewinder'],
...      columns=['max_speed', 'shield'])
>>> df.execute()
            max_speed  shield
cobra               1       2
viper               4       5
sidewinder          7       8

单个标签。请注意这将返回一行作为 Series。

>>> df.loc['viper'].execute()
max_speed    4
shield       5
Name: viper, dtype: int64

标签列表。请注意使用 [[]] 将返回一个 DataFrame。

>>> df.loc[['viper', 'sidewinder']].execute()
            max_speed  shield
viper               4       5
sidewinder          7       8

行和列的单个标签

>>> df.loc['cobra', 'shield'].execute()
2

使用标签切片行和单个标签切片列。如上所述,请注意切片的起始和结束都包含在内。

>>> df.loc['cobra':'viper', 'max_speed'].execute()
cobra    1
viper    4
Name: max_speed, dtype: int64

与行轴长度相同的布尔列表

>>> df.loc[[False, False, True]].execute()
            max_speed  shield
sidewinder          7       8

可对齐的布尔 Series:

>>> df.loc[md.Series([False, True, False],
...        index=['viper', 'sidewinder', 'cobra'])].execute()
            max_speed  shield
sidewinder          7       8

索引(行为与 df.reindex 相同)

>>> df.loc[md.Index(["cobra", "viper"], name="foo")].execute()
       max_speed  shield
foo
cobra          1       2
viper          4       5

返回布尔 Series 的条件表达式

>>> df.loc[df['shield'] > 6].execute()
            max_speed  shield
sidewinder          7       8

返回指定列标签的布尔 Series 的条件表达式

>>> df.loc[df['shield'] > 6, ['max_speed']].execute()
            max_speed
sidewinder          7

返回布尔 Series 的可调用对象

>>> df.loc[lambda df: df['shield'] == 8].execute()
            max_speed  shield
sidewinder          7       8

设置值

为匹配标签列表的所有项设置值

>>> df.loc[['viper', 'sidewinder'], ['shield']] = 50
>>> df.execute()
            max_speed  shield
cobra               1       2
viper               4      50
sidewinder          7      50

为整行设置值

>>> df.loc['cobra'] = 10
>>> df.execute()
            max_speed  shield
cobra              10      10
viper               4      50
sidewinder          7      50

为整列设置值

>>> df.loc[:, 'max_speed'] = 30
>>> df.execute()
            max_speed  shield
cobra              30      10
viper              30      50
sidewinder         30      50

为满足可调用条件的行设置值

>>> df.loc[df['shield'] > 35] = 0
>>> df.execute()
            max_speed  shield
cobra              30      10
viper               0       0
sidewinder          0       0

在具有整数标签索引的 DataFrame 上获取值

另一个使用整数作为索引的示例

>>> df = md.DataFrame([[1, 2], [4, 5], [7, 8]],
...      index=[7, 8, 9], columns=['max_speed', 'shield'])
>>> df.execute()
   max_speed  shield
7          1       2
8          4       5
9          7       8

使用整数标签切片行。如上所述,请注意切片的起始和结束都包含在内。

>>> df.loc[7:9].execute()
   max_speed  shield
7          1       2
8          4       5
9          7       8

使用 MultiIndex 获取值

使用具有 MultiIndex 的 DataFrame 的多个示例

>>> tuples = [
...    ('cobra', 'mark i'), ('cobra', 'mark ii'),
...    ('sidewinder', 'mark i'), ('sidewinder', 'mark ii'),
...    ('viper', 'mark ii'), ('viper', 'mark iii')
... ]
>>> index = md.MultiIndex.from_tuples(tuples)
>>> values = [[12, 2], [0, 4], [10, 20],
...         [1, 4], [7, 1], [16, 36]]
>>> df = md.DataFrame(values, columns=['max_speed', 'shield'], index=index)
>>> df.execute()
                     max_speed  shield
cobra      mark i           12       2
           mark ii           0       4
sidewinder mark i           10      20
           mark ii           1       4
viper      mark ii           7       1
           mark iii         16      36

单个标签。请注意这将返回一个具有单个索引的 DataFrame。

>>> df.loc['cobra'].execute()
         max_speed  shield
mark i          12       2
mark ii          0       4

单个索引元组。请注意这将返回一个 Series。

>>> df.loc[('cobra', 'mark ii')].execute()
max_speed    0
shield       4
Name: (cobra, mark ii), dtype: int64

行和列的单个标签。类似于传入一个元组,这将返回一个 Series。

>>> df.loc['cobra', 'mark i'].execute()
max_speed    12
shield        2
Name: (cobra, mark i), dtype: int64

单个元组。请注意使用 [[]] 将返回一个 DataFrame。

>>> df.loc[[('cobra', 'mark ii')]].execute()
               max_speed  shield
cobra mark ii          0       4

索引的单个元组与列的单个标签

>>> df.loc[('cobra', 'mark i'), 'shield'].execute()
2

从索引元组切片到单个标签

>>> df.loc[('cobra', 'mark i'):'viper'].execute()
                     max_speed  shield
cobra      mark i           12       2
           mark ii           0       4
sidewinder mark i           10      20
           mark ii           1       4
viper      mark ii           7       1
           mark iii         16      36

从索引元组切片到索引元组

>>> df.loc[('cobra', 'mark i'):('viper', 'mark ii')].execute()
                    max_speed  shield
cobra      mark i          12       2
           mark ii          0       4
sidewinder mark i          10      20
           mark ii          1       4
viper      mark ii          7       1