Pandas DataFrame loc []访问一组行和列

时间:2020-02-23 14:42:07  来源:igfitidea点击:

Pandas DataFrame loc []允许我们访问一组行和列。
我们可以传递标签以及布尔值来选择行和列。

DataFrame loc []输入

一些允许的输入是:

  • 单个标签–将行作为Series对象返回。

  • 标签列表–返回选定行的DataFrame。

  • 带标签的切片–返回具有指定行的系列,包括开始和结束标签。

  • 布尔数组–返回True标签的DataFrame,数组的长度必须与选定的轴相同。

  • 条件语句或者可调用函数–必须返回有效值以选择要返回的行和列。

DataFrame loc []示例

让我们看一些使用DataFrame对象的loc属性的示例。
但是,首先,我们将创建一个示例数据框架供我们使用。

import pandas as pd

d1 = {'Name': ['John', 'Jane', 'Mary'], 'ID': [1, 2, 3], 'Role': ['CEO', 'CTO', 'CFO']}

df = pd.DataFrame(d1)

print('DataFrame:\n', df)

输出:

DataFrame:
  Name  ID Role
0  John   1  CEO
1  Jane   2  CTO
2  Mary   3  CFO

1.带有单个标签的loc []

row_1_series = df.loc[1]
print(type(row_1_series))
print(df.loc[1])

输出:

<class 'pandas.core.series.Series'>
Name    Jane
ID         2
Role     CTO
Name: 1, dtype: object

2.带有标签列表的loc []

row_0_2_df = df.loc[[0, 2]]
print(type(row_0_2_df))
print(row_0_2_df)

输出:

<class 'pandas.core.frame.DataFrame'>
 Name  ID Role
0  John   1  CEO
2  Mary   3  CFO

3.获得单一价值

我们可以指定行和列标签以从DataFrame对象获取单个值。

jane_role = df.loc[1, 'Role']
print(jane_role)  # CTO

4.用loc []切片

我们也可以传递标签的一部分,在这种情况下,开始和结束标签将包含在结果Series对象中。

roles = df.loc[0:1, 'Role']
print(roles)

输出:

0    CEO
1    CTO
Name: Role, dtype: object

5.带有布尔值数组的loc []

row_1_series = df.loc[[False, True, False]]
print(row_1_series)

输出:

Name  ID Role
1  Jane   2  CTO

由于DataFrame具有3行,因此数组长度应为3。
如果布尔数组长度参数与轴的长度不匹配,则会引发IndexError:Item错误的长度。

6.带有条件语句的loc []

data = df.loc[df['ID'] > 1]
print(data)

输出:ID大于1的行的DataFrame。

Name  ID Role
1  Jane   2  CTO
2  Mary   3  CFO

7.具有可调用函数的DataFrame loc []

我们还可以将lambda函数与DataFrame loc []属性一起使用。

id_2_row = df.loc[lambda df1: df1['ID'] == 2]
print(id_2_row)

输出:

Name  ID Role
1  Jane   2  CTO

使用loc []属性设置DataFrame值

loc []的特殊功能之一是我们可以使用它来设置DataFrame值。
我们来看一些使用loc []属性设置DataFrame值的示例。

1.设置单个值

我们可以指定行标签和列标签来设置特定索引的值。

import pandas as pd

d1 = {'Name': ['John', 'Jane', 'Mary'], 'ID': [1, 2, 3], 'Role': ['CEO', 'CTO', 'CFO']}

df = pd.DataFrame(d1, index=['A', 'B', 'C'])
print('Original DataFrame:\n', df)

# set a single value
df.loc['B', 'Role'] = 'Editor'
print('Updated DataFrame:\n', df)

输出:

Original DataFrame:
  Name  ID Role
A  John   1  CEO
B  Jane   2  CTO
C  Mary   3  CFO

Updated DataFrame:
  Name  ID    Role
A  John   1     CEO
B  Jane   2  Editor
C  Mary   3     CFO

2.设置整行的值

如果仅指定一个标签,则该行中的所有值都将设置为指定的标签。

df.loc['B'] = None
print('Updated DataFrame with None:\n', df)

输出:

Updated DataFrame with None:
  Name   ID  Role
A  John  1.0   CEO
B  None  NaN  None
C  Mary  3.0   CFO

3.设置整个列的值

我们可以使用切片来选择所有行,并指定一列以将其值设置为指定的一列。

df.loc[:, 'Role'] = 'Employee'
print('Updated DataFrame Role to Employee:\n', df)

输出:

Updated DataFrame Role to Employee:
  Name   ID      Role
A  John  1.0  Employee
B  None  NaN  Employee
C  Mary  3.0  Employee

4.根据条件设置值

df.loc[df['ID'] == 1, 'Role'] = 'CEO'
print(df)

输出:

Name   ID      Role
A  John  1.0       CEO
B  None  NaN  Employee
C  Mary  3.0  Employee