Python的Pandas库是一个强大的数据处理和分析工具,其中数据选择与过滤是其核心功能之一。这些功能使用户能够高效地访问、修改、筛选出数据集中的特定部分。数据选择与过滤功能提供了数据操作的强大灵活性,使得数据分析工作流程变得更加高效和精确。本文主要介绍Python Pandas 数据选择与过滤。

1、列的选择、过滤和排序

选择、过滤和排序 Pandas DataFrame 中的列。这些操作是数据处理的基础,对于数据分析来说至关重要。

参考文档:

Python pandas dataframe 行列使用常用操作

Python pandas dataframe 行列的常用操作及运算

1)列的选择

可以直接使用列名、使用.loc[]、使用.iloc[]以及条件选择列。

import pandas as pd

# 创建示例DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'C': [7, 8, 9],
    'D': [10, 11, 12]
})

# 直接使用列名
column_a = df['A']

# 使用.loc[]选择器
columns_ab = df.loc[:, ['A', 'B']]

# 使用.iloc[]选择器
column_first = df.iloc[:, 0]  # 第一列
columns_first_two = df.iloc[:, :2]  # 前两列

# 条件选择:选择平均值大于6的列
selected_columns = df.loc[:, df.mean() > 6]

# 打印结果
print("直接使用列名选择的列A:\n", column_a)
print("\n使用.loc[]选择的列A和B:\n", columns_ab)
print("\n使用.iloc[]选择的第一列:\n", column_first)
print("\n使用.iloc[]选择的前两列:\n", columns_first_two)
print("\n条件选择,平均值大于6的列:\n", selected_columns)

2)列的过滤

可以基于列名的过滤、基于条件的过滤、使用列表推导式和使用filter函数的方法进行过滤,如下,

import pandas as pd

# 创建示例DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'C': [7, 8, 9],
    'D': [10, 11, 12]
})

# 基于列名的过滤
filtered_by_name = df[['A', 'C']]

# 基于条件的过滤:选择平均值大于5的列
filtered_by_condition = df.loc[:, df.mean() > 5]

# 使用列表推导式:选择列名以'B'或'C'开头的列
filtered_by_list_comprehension = df[[col for col in df.columns if col.startswith('B') or col.startswith('C')]]

# 使用filter函数:选择列名以'D'结尾的列
filtered_by_filter_func = df.filter(regex='D$', axis=1)

# 打印结果
print("基于列名的过滤:\n", filtered_by_name)
print("\n基于条件的过滤(平均值大于5):\n", filtered_by_condition)
print("\n使用列表推导式过滤('B'或'C'开头的列):\n", filtered_by_list_comprehension)
print("\n使用filter函数过滤('D'结尾的列):\n", filtered_by_filter_func)

3)列的排序

Pandas提供了多种方法来对列进行排序,既可以根据列的值排序,也可以根据列的标签(名称)排序。

import pandas as pd

# 创建示例DataFrame
df = pd.DataFrame({
    'Name': ['C#', 'JAVA', 'Python'],
    'Age': [24, 27, 22],
    'Salary': [70000, 80000, 60000]
})

# 根据Age列的值升序排序
sorted_by_age = df.sort_values(by='Age')

# 根据Salary列的值降序排序
sorted_by_salary_desc = df.sort_values(by='Salary', ascending=False)

# 将列名排序并使用这个顺序重新排列列
sorted_by_column_label = df[sorted(df.columns)]

# 先根据Age升序排序,再根据Salary降序排序
sorted_by_multiple_columns = df.sort_values(by=['Age', 'Salary'], ascending=[True, False])

# 打印结果
print("根据Age列值升序排序:\n", sorted_by_age)
print("\n根据Salary列值降序排序:\n", sorted_by_salary_desc)
print("\n根据列标签排序:\n", sorted_by_column_label)
print("\n根据多列排序(先Age升序,再Salary降序):\n", sorted_by_multiple_columns)

2、行的选择、过滤和排序

Python Pandas 提供了多种方法来根据标签索引、位置索引或条件来选择、过滤和排序 DataFrame 中的行。

参考文档:

Python pandas dataframe 行列使用常用操作

Python pandas dataframe 行列的常用操作及运算

1)行的选择

Pandas提供了多种方法来选择行,这使得数据分析和处理变得更加灵活和高效。

import pandas as pd

# 创建示例DataFrame
df = pd.DataFrame({
    'Name': ['C#', 'JAVA', 'Python'],
    'Age': [24, 27, 22]
}, index=['a', 'b', 'c'])

# 使用.loc[]选择器
# 选择标签为'a'的行
row_a = df.loc['a']

# 使用.loc[]选择多行
rows_ac = df.loc[['a', 'c']]

# 使用.iloc[]选择器
# 选择第一行
first_row = df.iloc[0]

# 使用.iloc[]选择多行
first_two_rows = df.iloc[:2]

# 使用布尔索引
# 选择Age大于23的行
older_than_23 = df[df['Age'] > 23]

# 使用切片选择行
slice_rows = df[1:3]

# 打印结果
print("使用.loc[]选择标签为'a'的行:\n", row_a)
print("\n使用.loc[]选择标签为'a'和'c'的行:\n", rows_ac)
print("\n使用.iloc[]选择第一行:\n", first_row)
print("\n使用.iloc[]选择前两行:\n", first_two_rows)
print("\n使用布尔索引选择Age大于23的行:\n", older_than_23)
print("\n使用切片选择第二行和第三行:\n", slice_rows)

2)行的过滤

行的过滤是指基于一定条件从DataFrame中提取特定的行。

import pandas as pd

# 创建示例DataFrame
df = pd.DataFrame({
    'Name': ['C#', 'JAVA', 'Python'],
    'Age': [24, 27, 22],
    'Salary': [70000, 90000, 50000]
})

# 使用布尔索引过滤出年龄大于23的行
filtered_by_age = df[df['Age'] > 23]

# 使用query()方法过滤出薪水高于60000且年龄小于30的行
filtered_by_query = df.query('Salary > 60000 and Age < 30')

# 结合使用多个条件,过滤出年龄大于22且薪水大于60000的行
filtered_by_multiple_conditions = df[(df['Age'] > 22) & (df['Salary'] > 60000)]

# 打印结果
print("使用布尔索引过滤年龄大于23的行:\n", filtered_by_age)
print("\n使用query()方法过滤薪水高于60000且年龄小于30的行:\n", filtered_by_query)
print("\n结合使用多个条件过滤年龄大于22且薪水大于60000的行:\n", filtered_by_multiple_conditions)

3)按行索引排序

sort_index() 是 pandas 中按索引排序的函数,默认情况下,sort_index 是按行索引来排序。

import pandas as pd

# 创建一个带有自定义索引的DataFrame
data = {
'brand':['CJAVAPY','编程之路','C#','Python','Java'],
 'B':[4,6,8,12,10],
 'A':[10,2,5,20,16],
 'D':[6,18,14,6,12],
 'years':[4,1,1,30,30],
 'C':[8,12,18,8,2],
 } 
index = [9,3,4,5,2]

df = pd.DataFrame(data=data,index=index)

# 按行索引升序排序
sorted_df = df.sort_index()

# 按行索引降序排序
sorted_df_desc = df.sort_index(ascending=False)

# 打印排序后的DataFrame
print("按行索引升序排序:\n", sorted_df)
print("\n按行索引降序排序:\n", sorted_df_desc)

推荐文档