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