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