pandas dataframe loc多列操作
参考:pandas dataframe loc multiple columns
在Python的数据处理库pandas中,DataFrame是一种二维的数据结构,非常适合处理统计、金融、社会科学和许多工程领域中的数据。DataFrame是一种表格型数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。
在处理DataFrame时,我们经常需要对其进行索引或者选择操作,比如选择某一列或者多列,或者根据某些条件来选择数据。在pandas中,我们可以使用loc
函数来完成这些操作。loc
函数是基于标签的数据选择方法,它可以接受的输入包括:
- 单个标签。例如:5或’a’,(注意这里的5是指标签而不是索引位置)。
- 列表或数组包含的标签。例如:[‘a’, ‘b’, ‘c’]。
- 切片对象。例如:’a’:’f’,(注意这里的’a’:’f’是指标签而不是索引位置)。
- 布尔数组。
- 可返回标签的函数或参数。
在本文中,我们将详细介绍如何使用loc
函数来选择DataFrame的多列数据。
1. 创建DataFrame
首先,我们需要创建一个DataFrame作为示例。我们可以使用pandas的DataFrame
函数来创建一个DataFrame。下面是一个示例:
import pandas as pd
data = {'Name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'Age': [20, 21, 19, 20, 18],
'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom2@pandasdataframe.com', 'john2@pandasdataframe.com']}
df = pd.DataFrame(data)
print(df)
Output:
在这个示例中,我们创建了一个包含三列(’Name’,’Age’和’Email’)的DataFrame。
2. 使用loc选择多列
如果我们想要选择DataFrame的多列,我们可以将这些列的名称放在一个列表中,然后将这个列表作为loc
函数的参数。下面是一个示例:
import pandas as pd
data = {'Name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'Age': [20, 21, 19, 20, 18],
'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom2@pandasdataframe.com', 'john2@pandasdataframe.com']}
df = pd.DataFrame(data)
selected_columns = df.loc[:, ['Name', 'Email']]
print(selected_columns)
Output:
在这个示例中,我们选择了’Name’和’Email’两列。注意,:
表示选择所有的行。
3. 使用loc选择多列并进行排序
我们还可以在选择多列之后,对这些列进行排序。我们可以使用DataFrame的sort_values
函数来完成这个操作。下面是一个示例:
import pandas as pd
data = {'Name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'Age': [20, 21, 19, 20, 18],
'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom2@pandasdataframe.com', 'john2@pandasdataframe.com']}
df = pd.DataFrame(data)
selected_columns = df.loc[:, ['Name', 'Email']].sort_values('Name')
print(selected_columns)
Output:
在这个示例中,我们选择了’Name’和’Email’两列,并按照’Name’列进行了排序。
4. 使用loc选择多列并进行筛选
我们还可以在选择多列之后,对这些列进行筛选。我们可以使用布尔索引来完成这个操作。下面是一个示例:
import pandas as pd
data = {'Name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'Age': [20, 21, 19, 20, 18],
'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom2@pandasdataframe.com', 'john2@pandasdataframe.com']}
df = pd.DataFrame(data)
selected_columns = df.loc[df['Name'] == 'Tom', ['Name', 'Email']]
print(selected_columns)
Output:
在这个示例中,我们选择了’Name’和’Email’两列,并筛选出’Name’列为’Tom’的行。
5. 使用loc选择多列并进行计算
我们还可以在选择多列之后,对这些列进行计算。我们可以使用DataFrame的各种计算函数来完成这个操作。下面是一个示例:
import pandas as pd
data = {'Name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'Age': [20, 21, 19, 20, 18],
'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom2@pandasdataframe.com', 'john2@pandasdataframe.com']}
df = pd.DataFrame(data)
average_age = df.loc[df['Name'] == 'Tom', 'Age'].mean()
print(average_age)
Output:
在这个示例中,我们选择了’Age’列,并计算了’Name’列为’Tom’的行的平均年龄。
6. 使用loc选择多列并进行分组
我们还可以在选择多列之后,对这些列进行分组。我们可以使用DataFrame的groupby
函数来完成这个操作。下面是一个示例:
import pandas as pd
data = {'Name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'Age': [20, 21, 19, 20, 18],
'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom2@pandasdataframe.com', 'john2@pandasdataframe.com']}
df = pd.DataFrame(data)
grouped = df.loc[:, ['Name', 'Age']].groupby('Name').mean()
print(grouped)
Output:
在这个示例中,我们选择了’Name’和’Age’两列,并按照’Name’列进行了分组,然后计算了每一组的平均年龄。
7. 使用loc选择多列并进行合并
我们还可以在选择多列之后,对这些列进行合并。我们可以使用DataFrame的merge
函数来完成这个操作。下面是一个示例:
import pandas as pd
data = {'Name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'Age': [20, 21, 19, 20, 18],
'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom2@pandasdataframe.com', 'john2@pandasdataframe.com']}
df = pd.DataFrame(data)
df1 = df.loc[:, ['Name', 'Age']]
df2 = df.loc[:, ['Name', 'Email']]
merged = pd.merge(df1, df2, on='Name')
print(merged)
Output:
在这个示例中,我们选择了’Name’和’Age’两列,并将它们合并成一个新的DataFrame。
8. 使用loc选择多列并进行重塑
我们还可以在选择多列之后,对这些列进行重塑。我们可以使用DataFrame的pivot
函数来完成这个操作。下面是一个示例:
import pandas as pd
data = {'Name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'Age': [20, 21, 19, 20, 18],
'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom2@pandasdataframe.com', 'john2@pandasdataframe.com']}
df = pd.DataFrame(data)
pivoted = df.loc[:, ['Name', 'Age', 'Email']].pivot(index='Name', columns='Email', values='Age')
print(pivoted)
Output:
在这个示例中,我们选择了’Name’,’Age’和’Email’三列,并将它们重塑成一个新的DataFrame,其中’Name’是索引,’Email’是列,’Age’是值。
9. 使用loc选择多列并进行转置
我们还可以在选择多列之后,对这些列进行转置。我们可以使用DataFrame的T
属性来完成这个操作。下面是一个示例:
import pandas as pd
data = {'Name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'Age': [20, 21, 19, 20, 18],
'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom2@pandasdataframe.com', 'john2@pandasdataframe.com']}
df = pd.DataFrame(data)
transposed = df.loc[:, ['Name', 'Age']].T
print(transposed)
Output:
在这个示例中,我们选择了’Name’和’Age’两列,并将它们转置成一个新的DataFrame。
10. 使用loc选择多列并进行填充缺失值
我们还可以在选择多列之后,对这些列进行填充缺失值。我们可以使用DataFrame的fillna
函数来完成这个操作。下面是一个示例:
import pandas as pd
data = {'Name': ['Tom', 'Nick', 'John', 'Tom', 'John'],
'Age': [20, 21, 19, 20, 18],
'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom2@pandasdataframe.com', 'john2@pandasdataframe.com']}
df = pd.DataFrame(data)
filled = df.loc[:, ['Name', 'Age']].fillna(0)
print(filled)
Output:
在这个示例中,我们选择了’Name’和’Age’两列,并将它们中的缺失值填充为0。
总结起来,loc
函数是一个非常强大的工具,它可以帮助我们在处理DataFrame时进行各种复杂的操作。