在 Pandas 中,索引是指从 DataFrame 中访问数据的行和列,而切片是指访问一系列行和列。
我们可以使用不同的方法从 DataFrame 中访问数据或数据范围。
访问 DataFrame 的列
我们可以使用方括号 ([]
) 运算符访问 DataFrame 的列。例如:
import pandas as pd
# create a DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [25, 32, 18, 47, 33],
'City': ['New York', 'Paris', 'London', 'Tokyo', 'Sydney']
}
df = pd.DataFrame(data)
# access the Name column
names = df['Name']
print(names)
输出
0 Alice 1 Bob 2 Charlie 3 David 4 Eve Name: Name, dtype: object
在此示例中,我们使用 []
运算符访问了 df 的 Name
列。它返回了一个包含 Name
列值的 Series。
我们也可以使用 []
运算符访问多个列。例如:
import pandas as pd
# create a DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [25, 32, 18, 47, 33],
'City': ['New York', 'Paris', 'London', 'Tokyo', 'Sydney']
}
df = pd.DataFrame(data)
# access multiple columns
name_city = df[['Name','City']]
print(name_city)
输出
Name City 0 Alice New York 1 Bob Paris 2 Charlie London 3 David Tokyo 4 Eve Sydney
在此示例中,我们使用 []
运算符访问了 df 的 Name
和 City
列。它返回了一个 DataFrame,其中包含 df 中 Name
和 City
的值。
但是,[]
运算符的功能有限。即使是选择行、切片 DataFrame 和选择单个元素等基本操作,仅使用 []
运算符也很棘手。
因此,我们使用 .loc
和 .iloc
属性来索引和切片 DataFrame。与 []
运算符相比,它们提供了更大的灵活性。
Pandas .loc
在 Pandas 中,我们使用 .loc
属性通过基于标签的索引来访问和修改 DataFrame 中的数据。它允许我们根据标签选择特定的行和列。
语法
Pandas 中 .loc
的语法是
df.loc[row_indexer, column_indexer]
这里,
row_indexer
- 按标签选择行,可以是单个标签、标签列表或布尔数组column_indexer
- 选择列,也可以是单个标签、标签列表或布尔数组
示例:使用 .loc 进行索引
我们可以使用 .loc
通过索引访问 DataFrame 中的数据。
import pandas as pd
# create a DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [25, 32, 18, 47, 33],
'City': ['New York', 'Paris', 'London', 'Tokyo', 'Sydney']
}
df = pd.DataFrame(data)
# access a single row
single_row = df.loc[2]
print("Single row:")
print(single_row)
print()
# access rows 0, 3 and 4
row_list = df.loc[[0, 3, 4]]
print("List of Rows:")
print(row_list)
print()
# access a list of columns
column_list = df.loc[:,['Name', 'Age']]
print("List of Columns:")
print(column_list)
print()
# access second row of 'Name' column
specific_value = df.loc[1, 'Name']
print("Specific Value:")
print(specific_value)
输出
Single row: Name Charlie Age 18 City London Name: 2, dtype: object List of Rows: Name Age City 0 Alice 25 New York 3 David 47 Tokyo 4 Eve 33 Sydney List of Columns: Name Age 0 Alice 25 1 Bob 32 2 Charlie 18 3 David 47 4 Eve 33 Specific Value: Bob
在这里,我们使用 .loc
通过相应的标签访问了一行、多行、多列以及一个特定值。
在这一行:
column_list = df.loc[:,['Name', 'Age']]
:
运算符表示选择所有行。
示例:使用 .loc 进行切片
我们还可以使用 .loc
访问一行和列的范围。如果我们顺序访问 DataFrame(例如从索引1到3),我们称之为切片。
import pandas as pd
# create a DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [25, 32, 18, 47, 33],
'City': ['New York', 'Paris', 'London', 'Tokyo', 'Sydney']
}
df = pd.DataFrame(data)
# slice rows from index 1 to 3
slice_rows = df.loc[1:3]
print("Sliced Rows:")
print(slice_rows)
print()
# slicing columns from 'Name' to 'Age'
slice_columns = df.loc[:, 'Name':'Age']
print("Sliced Columns:")
print(slice_columns)
输出
Sliced Rows: Name Age City 1 Bob 32 Paris 2 Charlie 18 London 3 David 47 Tokyo Sliced Columns: Name Age 0 Alice 25 1 Bob 32 2 Charlie 18 3 David 47 4 Eve 33
在这里,我们使用 .loc
和 :
运算符对行和列进行了切片。
请注意,端点是包含在内的,即 df.loc[1:3]
中同时包含1和3这两个位置。
示例:使用 .loc 进行布尔索引
我们可以使用布尔索引来设置条件并过滤数据。
import pandas as pd
# create a DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [25, 32, 18, 47, 33],
'City': ['New York', 'Paris', 'London', 'Tokyo', 'Sydney']
}
df = pd.DataFrame(data)
# boolean indexing with .loc
boolean_index = df.loc[df['Age'] > 30]
print("Filtered DataFrame: ")
print(boolean_index)
输出
Boolean Indexing: Name Age City 1 Bob 32 Paris 3 David 47 Tokyo 4 Eve 33 Sydney
在此示例中,我们选择了 Age
值大于30的所有行。
Pandas .iloc
在 Pandas 中,.iloc
属性用于通过基于整数的索引来访问和修改 DataFrame 中的数据。它允许我们根据整数位置选择特定的行和列。
语法
Pandas 中 .iloc
的语法是
df.iloc[row_indexer, column_indexer]
这里,
row_indexer
- 用于按整数位置选择行,可以是单个整数、整数列表或布尔数组column_indexer
- 选择列,也可以是单个整数、整数列表或布尔数组
示例:使用 .iloc 进行索引
import pandas as pd
# create a DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [25, 32, 18, 47, 33],
'City': ['New York', 'Paris', 'London', 'Tokyo', 'Sydney']
}
df = pd.DataFrame(data)
# access single row
single_row = df.iloc[2]
# access rows 0, 3 and 4
row_list = df.iloc[[0, 3, 4]]
# access columns 0 and 2
column_list = df.iloc[:,[0,2]]
# access a specific value
specific_value = df.iloc[1, 0]
# display result
print("Single Row:")
print(single_row)
print()
print("List of Rows:")
print(row_list)
print()
print("List of Columns:")
print(column_list)
print()
print("Specific Value:")
print(specific_value)
输出
Single Row: Name Charlie Age 18 City London Name: 2, dtype: object List of Rows: Name Age City 0 Alice 25 New York 3 David 47 Tokyo 4 Eve 33 Sydney List of Columns: Name City 0 Alice New York 1 Bob Paris 2 Charlie London 3 David Tokyo 4 Eve Sydney Specific Value: Bob
在这里,我们使用 .iloc
通过相应的整数值访问了一行、多行、多列以及一个特定值。
示例:使用 .iloc 进行切片
import pandas as pd
# create a sample DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [25, 32, 18, 47, 33],
'City': ['New York', 'Paris', 'London', 'Tokyo', 'Sydney']
}
df = pd.DataFrame(data)
# slice rows from position 1 to 3
slice_rows = df.iloc[1:4]
# slice columns from position 0 to 1
slice_columns = df.iloc[:, 0:2]
# display results
print("Sliced Rows:")
print(slice_rows)
print()
print("Sliced Columns:")
print(slice_columns)
输出
Sliced Rows: Name Age City 1 Bob 32 Paris 2 Charlie 18 London 3 David 47 Tokyo Sliced Columns: Name Age 0 Alice 25 1 Bob 32 2 Charlie 18 3 David 47 4 Eve 33
请注意,位置 4 不包含在 df.iloc[1:4]
中。
.loc 与 .iloc 的区别
.loc
和 .iloc
的主要区别如下:
依据 | .loc | .iloc |
---|---|---|
索引 | 基于标签的索引 | 基于整数的索引 |
端点 | 端点包含在内 | 端点不包含在内 |
布尔索引 | 支持布尔索引 | 不支持布尔索引 |