pandas 中的 [] 和 [[]] 有什么区别 [复制]

作者:编程家 分类: pandas 时间:2025-03-23

在 pandas 中,使用 [] 和 [[]] 两种方式可以实现对 DataFrame 或 Series 中的数据进行筛选、索引和操作。然而,它们之间还是存在一些区别的。

首先,使用 [] 对于 DataFrame 来说,可以实现列的筛选和操作。我们可以使用列名来选择特定的列,也可以使用布尔条件来筛选符合条件的行。例如,我们有一个包含学生信息的 DataFrame,其中包含姓名、年龄和成绩三列,我们可以使用 [] 来选择成绩列的数据,或者使用布尔条件筛选出年龄大于等于18岁的学生数据。

python

import pandas as pd

# 创建 DataFrame

data = {

'姓名': ['张三', '李四', '王五', '赵六'],

'年龄': [20, 19, 21, 18],

'成绩': [85, 92, 78, 80]

}

df = pd.DataFrame(data)

# 选择成绩列的数据

scores = df['成绩']

print(scores)

# 筛选年龄大于等于18岁的学生数据

filtered_data = df[df['年龄'] >= 18]

print(filtered_data)

而使用 [[]] 对于 DataFrame 来说,可以实现多列的筛选和操作。我们可以使用一个列表来选择多个列,并返回一个新的 DataFrame,其中只包含选定的列。例如,我们可以使用 [[]] 来选择姓名和成绩两列,并返回一个新的 DataFrame。

python

# 选择姓名和成绩两列的数据

selected_data = df[['姓名', '成绩']]

print(selected_data)

对于 Series 来说,[] 和 [[]] 的功能相似,都可以实现元素的筛选和操作。使用 [] 可以通过索引或索引标签选择特定的元素,使用布尔条件筛选符合条件的元素。而使用 [[]] 可以选择多个元素并返回一个新的 Series。

python

# 创建 Series

grades = pd.Series([85, 92, 78, 80], index=['张三', '李四', '王五', '赵六'])

# 选择李四的成绩

grade1 = grades['李四']

print(grade1)

# 筛选成绩大于等于80的学生数据

filtered_grades = grades[grades >= 80]

print(filtered_grades)

# 选择张三和王五的成绩

selected_grades = grades[['张三', '王五']]

print(selected_grades)

使用 [] 和 [[]] 的区别

在对 DataFrame 进行操作时,使用 [] 返回的是一个 Series,而使用 [[]] 返回的是一个 DataFrame。这是因为使用 [] 时,只选择了一列数据,因此返回的是一个 Series;而使用 [[]] 选择了多列数据,因此返回的是一个 DataFrame。

另外,使用 [] 选择单列数据时,可以直接使用列名进行选择,而使用 [[]] 则需要使用一个列表来选择列。例如,df['成绩'] 可以直接选择成绩列的数据,而 df[['姓名', '成绩']] 则需要使用列表来选择姓名和成绩两列的数据。

使用 [] 和 [[]] 对于 Series 来说,可以实现类似的功能,都可以选择特定的元素或筛选符合条件的元素。不过,使用 [] 时,选择单个元素时返回的是元素的值,选择多个元素时返回的是一个新的 Series;而使用 [[]] 时,选择单个元素或多个元素都返回的是一个新的 Series。

[] 和 [[]] 在 pandas 中有一些区别,主要体现在对 DataFrame 和 Series 进行操作时的返回结果和选择方式上。根据具体的需求,我们可以选择使用适合的方式来对数据进行筛选和操作。