pandas 如何使用loc来选择 DataFrame 中的多列数据
参考:pandas dataframe loc multiple columns
在数据分析中,我们经常需要对数据进行切片和筛选。Pandas 是一个强大的数据处理库,它提供了多种方法来实现这一目标。其中,loc
是 Pandas 提供的一种基于标签的数据索引方法,可以让我们方便地通过行标签和列标签来定位数据。本文将详细介绍如何使用 loc
来选择 DataFrame 中的多列数据。
1. 基本用法
loc
的基本用法是 df.loc[行标签, 列标签]
。其中,行标签和列标签可以是单个标签,也可以是标签列表,还可以是标签的切片对象。如果我们想要选择 DataFrame 中的多列数据,可以将多个列标签放在一个列表中,然后传递给 loc
。
下面是一个简单的例子:
import pandas as pd
# 创建一个 DataFrame
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
}, index=['a', 'b', 'c'])
# 使用 loc 选择多列数据
df.loc[:, ['A', 'C']]
print(df)
Output:
在这个例子中,:
表示选择所有行,['A', 'C']
表示选择 ‘A’ 列和 ‘C’ 列。所以,df.loc[:, ['A', 'C']]
就可以选择出 DataFrame 中的 ‘A’ 列和 ‘C’ 列。
2. 使用切片选择多列
除了使用列标签列表,我们还可以使用列标签的切片来选择多列。这在列标签有序的情况下非常有用。
下面是一个例子:
import pandas as pd
# 创建一个 DataFrame
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9],
'D': [10, 11, 12]
}, index=['a', 'b', 'c'])
# 使用 loc 和切片选择多列数据
df.loc[:, 'A':'C']
print(df)
Output:
在这个例子中,'A':'C'
是一个列标签的切片,表示从 ‘A’ 列到 ‘C’ 列。所以,df.loc[:, 'A':'C']
就可以选择出 DataFrame 中从 ‘A’ 列到 ‘C’ 列的所有列。
3. 使用布尔索引选择多列
除了直接使用列标签,我们还可以使用布尔索引来选择多列。这在需要根据某些条件来选择列的情况下非常有用。
下面是一个例子:
import pandas as pd
# 创建一个 DataFrame
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9],
'D': [10, 11, 12]
}, index=['a', 'b', 'c'])
# 使用 loc 和布尔索引选择多列数据
df.loc[:, df.loc['a'] > 2]
print(df)
Output:
在这个例子中,df.loc['a'] > 2
是一个布尔索引,表示选择出 ‘a’ 行中大于 2 的列。所以,df.loc[:, df.loc['a'] > 2]
就可以选择出 DataFrame 中 ‘a’ 行中大于 2 的所有列。
4. 使用函数选择多列
除了上述方法,我们还可以使用函数来选择多列。这在需要根据复杂逻辑来选择列的情况下非常有用。
下面是一个例子:
import pandas as pd
# 创建一个 DataFrame
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9],
'D': [10, 11, 12]
}, index=['a', 'b', 'c'])
# 使用 loc 和函数选择多列数据
df.loc[:, lambda df: ['A', 'C']]
print(df)
Output:
在这个例子中,lambda df: ['A', 'C']
是一个函数,它接受一个 DataFrame 作为参数,返回一个列标签列表。所以,df.loc[:, lambda df: ['A', 'C']]
就可以选择出 DataFrame 中的 ‘A’ 列和 ‘C’ 列。
5. 使用 loc
修改多列数据
loc
不仅可以用来选择数据,还可以用来修改数据。我们可以将 loc
选择出的多列数据赋值给一个新的值,或者一个和选择出的数据形状相同的数组。
下面是一个例子:
import pandas as pd
# 创建一个 DataFrame
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9],
'D': [10, 11, 12]
}, index=['a', 'b', 'c'])
# 使用 loc 修改多列数据
df.loc[:, ['A', 'C']] = 0
print(df)
Output:
在这个例子中,df.loc[:, ['A', 'C']] = 0
将 ‘A’ 列和 ‘C’ 列的所有数据都修改为了 0。
总结起来,loc
是一个非常强大的工具,它可以让我们方便地选择和修改 DataFrame 中的多列数据。