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)