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)