【pandas】.loc常用操作
.loc是pandas中的索引器,主要用于Series和Dataframe上,基于标签(行标签和列标签)选取数据,可以进行行和列的切片操作,支持单个标签,标签列表,条件表达式等
在Dataframe上的操作:
先创建个Dataframe:
import pandas as pd# 创建一个 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie'],'Age': [25, 30, 35],'City': ['New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)
print(df)
输出:
Name Age City
0 Alice 25 New York
1 Bob 30 Los Angeles
2 Charlie 35 Chicago
行操作相关
1、选取某行数据
# 选取标签为0的行
row_0 = df.loc[0]
print(row_0)
输出:
Name Alice
Age 25
City New York
Name: 0, dtype: object
.loc[0]
表示选取标签为 0
的那一行,返回的是一个 Series
对象。
2、选取连续的多行数据
可以使用切片选取连续的行:
# 选取标签从 0 到 1 的行(包含 1)
rows_0_to_1 = df.loc[0:1]
print(rows_0_to_1)
输出:
Name Age City
0 Alice 25 New York
1 Bob 30 Los Angeles
使用切片0:1选取行标签0-1的连续两行数据,返回的是一个Dataframe对象。
注意,.loc
使用标签的“闭区间”特性,也就是说切片操作包含结束标签(即 1
也会被选取)。
3、选取分离的多行数据
如果想一次性选取分离的多个行,可以将行标签放在列表里传递给.loc:
# 选取标签为 0 和 2 的行
rows_0_2 = df.loc[[0, 2]]
print(rows_0_2)
输出:
Name Age City
0 Alice 25 New York
2 Charlie 35 Chicago
.loc[[0, 2]]表示一次性选取标签为0和2的两行数据,返回的是一个Dataframe对象。
4、通过条件筛选特定的行
可以根据条件来选择特定的行:
# 选择 'Age' 大于 30 的行
rows_age_above_30 = df.loc[df['Age'] > 30]
print(rows_age_above_30)
输出:
Name Age City
2 Charlie 35 Chicago
df['Age'] > 30会返回一个[False, False, True]的bool列表,.loc根据这个bool列表选取行数据,不管返回的数据有一行还是多行,返回的是一个Dataframe对象。
5、修改某行的数据
可以通过 .loc
修改某一行的数据
# 修改标签为 1 的行的 'Age' 为 32
df.loc[1, 'Age'] = 32
print(df)
输出:
Name Age City
0 Alice 25 New York
1 Bob 32 Los Angeles
2 Charlie 35 Chicago
.loc[1, 'Age']锁定行标签为1列标签为‘Age’的单元数据,修改是直接作用在原Datafrmae对象上的。
总结
.loc[row_label]
用于按行标签选择特定行。.loc[[row_label1, row_label2]]
用于选择多个行。.loc[start:end]
用于选择连续的行(包含结束标签)。.loc[condition]
用于根据条件选择行。
列操作相关
1、按列名选取某列数据
# 选取 'Age' 列
age_column = df.loc[:, 'Age']
print(age_column)
输出:
0 25
1 30
2 35
Name: Age, dtype: int64
.loc[:, 'Age']
中,:
表示选择所有行,'Age'
则表示选取列名为 'Age'
的列,返回的是一个 Series
对象。
2、选取多列
一次性选取多个列,可以将列名列表传递给 .loc:
# 选取 'Name' 和 'City' 列
name_city_columns = df.loc[:, ['Name', 'City']]
print(name_city_columns)
输出:
Name City
0 Alice New York
1 Bob Los Angeles
2 Charlie Chicago
3. 条件筛选行和列
结合条件筛选来选择特定的行和列:
# 选择 'Age' 大于 25 的行,并选取 'Name' 和 'City' 列
result = df.loc[df['Age'] > 25, ['Name', 'City']]
print(result)
输出:
Name City
1 Bob Los Angeles
2 Charlie Chicago
4. 修改某列的值
可以通过 .loc
修改某列的值:
# 修改 'Age' 列中,标签为 0 的值
df.loc[0, 'Age'] = 26
print(df)
输出:
Name Age City
0 Alice 26 New York
1 Bob 30 Los Angeles
2 Charlie 35 Chicago
总结
.loc[:, 'Column_Name']
用于按列名选取特定列。.loc[:, ['Column1', 'Column2']]
可以选择多个列。- 你还可以结合条件筛选行,同时选择特定的列。
行列一起操作
1、按标签选择多行和多列
# 选择标签为 0 和 1 的行,以及 'Name' 和 'Age' 列
result = df.loc[0:1, ['Name', 'Age']]
print(result)
在Series上操作
.loc
也可以在 pandas.Series
上使用,功能与在 DataFrame
上类似。Series
是一种一维标签化数组,它与 DataFrame
类似,只是没有列的维度,因此 .loc
在 Series
中主要用于根据标签选择数据或修改数据
构造一个 Series
对象:
import pandas as pd# 创建一个 Series 对象
data = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(data)
输出:
a 10
b 20
c 30
dtype: int64
1、选择单个元素
# 选择标签为 'a' 的元素
result = data.loc['a']
print(result) # 输出:10
2、选择多个元素
# 选择标签为 'a' 和 'c' 的元素
result = data.loc[['a', 'c']]
print(result)
输出:
a 10
c 30
dtype: int64
3、在 Series
上使用条件选择
可以使用条件表达式选择符合条件的元素:
# 选择值大于 15 的元素
result = data.loc[data > 15]
print(result)
输出:
b 20
c 30
dtype: int64
4、修改 Series
中的数据
可以通过 .loc
修改 Series
中的数据
# 修改标签为 'b' 的元素为 25
data.loc['b'] = 25
print(data)
输出:
a 10
b 25
c 30
dtype: int64
5、使用 .loc
进行切片操作
和在 DataFrame
中一样,.loc
也可以用来在 Series
中进行切片操作,使用标签范围:
# 选择从 'a' 到 'b' 的切片
result = data.loc['a':'b']
print(result)
输出:
a 10
b 25
dtype: int64
与 DataFrame
的不同之处
- 在
Series
中,.loc
主要用于基于标签的选择,而在DataFrame
中,除了标签选择之外,还可以按列名进行选择。 Series
只有一维数据,但你仍然可以使用标签或布尔条件来选择数据。