【数据操作与可视化】Pandas数据处理-数据选择与过滤
一、数据选择
常规的数据选择主要有列选择、行选择、行列同时选择三种方式。
1、列选择
df = pd.read_excel(r'数据类型转换.xlsx')
print(df.info())
# 选择单列
print(df['类型'])
# 选择多列
print(df[['日期', '售价']]) # 这种形式只能传列名,不能传列的index数字
2、通过列的位置索引选择列 df.iloc
# iloc接受两个参数,一个是行的坐标,一个是列的坐标。
# 坐标可以是两种形式,一种是像列表一样的切片语法,用于选择连续的行或列
# 另一种是具体的行或列的坐标,用于选择具体的某几行某几列
print(df.iloc[:, 1:5]) # 选择所有行和指定列
# 选择特定的行或列
print(df.iloc[[0,3,4], [1,3,4]])
# 只指定行,不指定列,默认就包含全部的列
print(df.iloc[[0,3,4]])
3、通过行标签来选择行 df.loc
# 通过loc方法来选择一行
print(df.loc[2]) # 通过行的位置索引来选择行,注意,只有当行标签是位置标签的时候才支持用位置索引。如果只选择了一行,则类型为Series对象
# 切片形式可以选择多行,也是只有当行标签是位置标签的时候才支持用位置索引
print(df.loc[2:4])
# 如果行标签变成了其他类型的值(比如日期类型),则不再支持使用位置索引
df.set_index('日期', inplace=True)
# 行标签改成日期后,再用位置索引会报错
print(df.loc[2:4])
# 传入单独的行标签选择特定的行
print(df.loc['2020/03/03'])
print(df.loc[['2020/03/03', '2020/03/05']]) # 通过行标签选择多行
# 通过传入行和列标签选择数据
# 注意:第一个参数只有当行标签是默认的位置标签时,可以使用位置索引或分片语法来引用,否则必须用行标签的值
# 第二个参数必须是列标签,不能传列位置
# df.index = ['A','B','C','D','E','F'] 如果先改行标签为自定义标签,则下面的语句就会报错了。
print(df.loc[1:3, ['售价', '部门']])
二、数据过滤(按条件选择行)
# python中使用逻辑操作符筛选符合条件的数据
print(df[df['售价'] > 33.68])
# 多条件过滤(同时满足全部条件)
print(df[(df['售价'] > 33.68) & (df['身高'] < 178)]) # 一定要记得在条件上打括号,否则报错
# 多条件过滤(满足其中一个)
print(df[(df['售价'] > 33.68) | (df['身高'] < 178)])
# 判断是否某列的值是否在一个集合中
print(df['部门'].isin(['销售1部', '教学2部']))
# 选出符合集合中的值的记录
print(df[df['部门'].isin(['销售1部', '教学2部'])])
# 筛选出来值并进行删除操作
df.drop(df[df['身高']>170].index) # 非原地删除,要加inplace参数
# 在筛选的结果基础上,只显示特定的列
print(df[df['身高']>170][['部门', '身高']])