Chapter5 数据预处理
1.缺失值查找
# 缺失值查找
df_excel = pd.read_excel(r"C:\Users\aurora\Desktop\dsxwm.xlsx",sheet_name=1)
ic(df_excel.info()) #看数量
ic(df_excel.isnull())
info()函数查看数据信息,isnull()判断是否为空,返回布尔值
2.删除缺失值,用dropna()
# 缺失值的删除,加参数how,删除整行都为空的行,不加参数就会删除含有空值的所有行
ic(df_excel.dropna(how="all"))
3.缺失值的填充,用fillna()
# 缺失值的填充,用键值对
df_excel1 = df_excel.fillna({"销量":"0","货物分类":"牛奶"})
ic(df_excel1)
上述代码表示对销量列的空值用0填充,货物分类列的空值用“牛奶”填充
4.删除重复值,用drop_duplicates(),默认对所有字段去重;subset参数对指定列删除重复值,有多列以列表的形式传入;keep参数设置保留值,默认first保留重复值中的第一个值,last保留最后一个,False删除所有重复值。
# 删除重复值,判断多列重复,用列表形式将列名传入subset
ic(df_excel.drop_duplicates())
ic(df_excel.drop_duplicates(subset='售货员'))
5.数据类型转换
# 数据类型转换,o为pandas的非结构化数据,如字符串类型,不能转为数字类型
ic(df_sql['销售额'].dtype)
df_sql['销量'].astype(int)
ic(df_sql['销量'].dtype)
注意:在数据类型转换中,需要确定两种数据类型可相互转换。例如pandas中不能用astype转换非结构化数据和数值数据,会报错。
5.索引设置
# 将特定列作为行索引
ic(df_sql.set_index("商店名"))
# 重命名列索引
df_sql2 = df_sql.rename(columns={"商店名":"商店编号","销售额":"销售金额"})
df_sql2 = df_sql2.set_index("商店编号")
ic(df_sql2)
# 重命名行索引
df_sql3 = df_sql.rename(index={1:"一",2:"二",3:"三"})
ic(df_sql3)
# 重置索引
ic(df_excel.reset_index())
设置索引用set_index(),重命名用rename,columns参数指定列,index指定行,以字典的方式传入原名称和新的名称。重置索引用reset_index(),默认将索引全部转换为列。
如下图:
Chapter6 数据选择
常见数据选择包含行选择,列选择和行列同时选择三种方式。
1.列选择
- 传入列名。直接在dateframe数据的[]中指明列名,要引入多列用列表形式传入。
- 传入列的位置。iloc方法后的方括号中,逗号之前的部分表示要获取的行的位置,只输入一个冒号,不输入任何数值表示获取所有的行;逗号之后的方括号表示要获取的列的位置。
- 切片索引。通过切片选择连续的多列。iloc方法后的方括号中,逗号后面表示要选择列的位置区间,0:3表示选择第1列到第4列之间的值(包含第1列但不包含第4列)
ic(df_excel['售货员'])
ic(df_excel[['售货员','销量']])
# ,之前为行,之后为列,要传入的列放在列表,输出第二列和第四列
ic(df_excel.iloc[:,[1,3]])
# 输出第二列到第四列,不包含第四列,即第二列和第三列
ic(df_excel.iloc[:,1:3])
输出结果如下:
2.行选择
# 选择第一行和第四行
ic(df_excel.iloc[0,3])
# 选择第一行到第四行,不包括第四行
ic(df_excel.iloc[0:3,:])
输出如下:
选择满足条件的行
# 条件筛选
ic(df_excel[(df_excel['销量']>2384) & (df_excel['编号']=='SD20') ])
输出如下:
3.行列同时选择
可以传入索引名称、索引位置、索引切片进行选择
# 第一行和第三行,销量和售货员列
ic(df_excel.loc[[0,2],['销量','售货员']])
# 选择第1到4行,不包括4行,第2到4列,不包括第4列的数据
ic(df_excel.iloc[0:3,1:3])
# 选择第1行第4列的数据
ic(df_excel.iloc[0,3])
输出如下:
总结:
- pandas中寻找行列数据可以用loc和iloc方法。区别在于loc接收行列的名称,遵循闭区间原则;iloc接收行列的索引位置,即从0开始的下标,遵循左闭右开原则。
- 切片索引中,用逗号分隔行列索引,:默认所有行(列)