Python pandas.DataFrame.loc函数方法的使用

pandas.DataFrame.loc 是Python Pandas 库中非常强大的一个函数,用于通过标签(label)进行数据选取和操作。本文主要介绍一下Pandas中pandas.DataFrame.loc方法的使用。

DataFrame.loc

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

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

允许的输入是:

  • 单个标签,例如,5'a',(注意:5被解释为索引的标签,并且从不作为索引的整数位置)。
  • 标签列表或数组, 例如, ['a', 'b', 'c'].
  • 具有标签的切片对象,例如, 'a':'f'.

注意:与通常的python切片相反,包括开始和停止

  • 与被切片的轴相同长度的布尔数组, 例如,[True, False, True].
  • 带有一个参数(调用SeriesDataFramePanel)的可调用函数,它返回索引的有效输出(上述之一)

Raises:

KeyError:

找不到任何元素时

例如

import pandas as pd

# 示例 1:使用 loc 获取值

# 创建 DataFrame
df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
                  index=['cobra', 'viper', 'sidewinder'],
                  columns=['max_speed', 'shield'])
print("初始 DataFrame:\n", df)

# 获取单一标签的行
print("\n获取单一标签的行:\n", df.loc['viper'])

# 获取标签列表的行
print("\n获取标签列表的行:\n", df.loc[['viper', 'sidewinder']])

# 获取单行单列的值
print("\n获取单行单列的值:\n", df.loc['cobra', 'shield'])

# 使用标签切片和单个标签获取值
print("\n使用标签切片和单个标签获取值:\n", df.loc['cobra':'viper', 'max_speed'])

# 使用布尔列表获取值
print("\n使用布尔列表获取值:\n", df.loc[[False, False, True]])

# 使用条件获取值
print("\n使用条件获取值:\n", df.loc[df['shield'] > 6])

# 使用可调用条件获取值
print("\n使用可调用条件获取值:\n", df.loc[lambda df: df['shield'] == 8])

# 使用条件和指定列标签获取值
print("\n使用条件和指定列标签获取值:\n", df.loc[df['shield'] > 6, ['max_speed']])

# 示例 2:使用 loc 赋值

# 为与标签列表匹配的所有项设置值
df.loc[['viper', 'sidewinder'], ['shield']] = 50
print("\n为与标签列表匹配的所有项设置值:\n", df)

# 为整行设置值
df.loc['cobra'] = 10
print("\n为整行设置值:\n", df)

# 为整个列设置值
df.loc[:, 'max_speed'] = 30
print("\n为整个列设置值:\n", df)

# 为匹配可调用条件的行设置值
df.loc[df['shield'] > 35] = 0
print("\n为匹配可调用条件的行设置值:\n", df)

# 示例 3:使用整数标签获取 DataFrame 上的值

# 创建使用整数索引的 DataFrame
df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
                  index=[7, 8, 9], columns=['max_speed', 'shield'])
print("\n使用整数索引的 DataFrame:\n", df)

# 使用整数标签切片获取值
print("\n使用整数标签切片获取值:\n", df.loc[7:9])

# 示例 4:使用多索引获取值

# 创建使用多索引的 DataFrame
tuples = [
    ('cobra', 'mark i'), ('cobra', 'mark ii'),
    ('sidewinder', 'mark i'), ('sidewinder', 'mark ii'),
    ('viper', 'mark ii'), ('viper', 'mark iii')
]
index = pd.MultiIndex.from_tuples(tuples)
values = [[12, 2], [0, 4], [10, 20],
          [1, 4], [7, 1], [16, 36]]
df = pd.DataFrame(values, columns=['max_speed', 'shield'], index=index)
print("\n使用多索引的 DataFrame:\n", df)

# 获取单一标签的行
print("\n获取单一标签的行:\n", df.loc['cobra'])

# 获取单索引元组的行
print("\n获取单索引元组的行:\n", df.loc[('cobra', 'mark ii')])

# 获取行和列的单个标签
print("\n获取行和列的单个标签:\n", df.loc['cobra', 'mark i'])

# 使用单元组返回 DataFrame
print("\n使用单元组返回 DataFrame:\n", df.loc[[('cobra', 'mark ii')]])

# 使用索引的单个元组和列的单个标签获取值
print("\n使用索引的单个元组和列的单个标签获取值:\n", df.loc[('cobra', 'mark i'), 'shield'])

# 从索引元组切片到单个标签
print("\n从索引元组切片到单个标签:\n", df.loc[('cobra', 'mark i'):'viper'])

# 从索引元组切片到索引元组
print("\n从索引元组切片到索引元组:\n", df.loc[('cobra', 'mark i'):('viper', 'mark ii')])

推荐阅读
cjavapy编程之路首页