栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【Python百日基础系列】Day13 - Pandas 数据预处理与描述性分析

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Python百日基础系列】Day13 - Pandas 数据预处理与描述性分析

文章目录
  • 一、Pandas 数据预处理
    • 1.1 控制台个性化显示设置
      • 1.1.1 控制台显示所有列,换行显示
      • 1.1.2 控制台显示所有行
      • 1.1.3 修改pandas默认绘图引擎为plotly(需要提前安装好plotly)
      • 1.1.4 还原所有显示设置
    • 1.2 数据概貌
      • 1.2.1 查看数据维度
      • 1.2.2 查看前5条数据
      • 1.2.3 查看后10条数据
      • 1.2.4 随机查看8条数据
      • 1.2.5 查看数据基本信息
      • 1.2.6 查看 数值型 列的统计信息
    • 1.3 缺失值处理
      • 1.3.1 查看各列缺失值
      • 1.3.2 查看缺失值合计数
      • 1.3.3 查看有缺失值的列
      • 1.3.4 查看有缺失值的行
      • 1.3.5 删除有缺失值的行
      • 1.3.6 缺失值整体填充
      • 1.3.7 缺失值填充为前行同列值,可以整体或整列填充
      • 1.3.8 缺失值填充为后行同列值,可以整体或整列填充
      • 1.3.9 缺失值填充为同列均值,只能填充数据列
      • 1.3.9 缺失值填充为上下列均值,只能填充数据列
    • 1.4 重复值处理
      • 1.4.1 查找完全重复的行
      • 1.4.2 查找某列重复的行
      • 1.4.3 删除全部重复的行,默认保留第一次出现的值
      • 1.4.4 删除某列重复的行,默认保留第一次出现的值
      • 1.4.5 删除重复值,保留最后一次出现的值
  • 二、Pandas数据描述性分析
    • 2.1 数据排序
      • 2.1.1 按索引列排序
      • 2.1.2 按数据列的值排序,适用于数字和字符串等类型
      • 2.1.3 提取数字型数据列的n个最大值:nlargest()
      • 2.1.4 提取数字型数据列最大值的索引:idxmax()
    • 2.2 聚合统计
      • 2.2.1 计算数字型数据列的均值:mean()
      • 2.2.2 计算数字型数据列的中位数:median()
      • 2.2.3 计算数字型数据列的众数:mode()
      • 2.2.4 一次性统计数字型数据列的多个聚合指标:agg()
      • 2.2.5 一次性统计数字型数据列的全部统计指标:describe()
      • 2.2.6 分组统计平均数
      • 2.2.7 分组统计多个聚合指标
      • 2.2.8 统计相关系数
      • 2.2.9 统计数据频数

视频讲解:

【Python百日基础系列】13 - 数据预处理与描述性分析

一、Pandas 数据预处理 1.1 控制台个性化显示设置 1.1.1 控制台显示所有列,换行显示
pd.set_option('display.max_columns', None)
df = pd.read_csv('data.csv')
print(df)
1.1.2 控制台显示所有行
pd.set_option('display.max_rows', None)
df = pd.read_csv('data.csv')
print(df)
1.1.3 修改pandas默认绘图引擎为plotly(需要提前安装好plotly)
pd.set_option("plotting.backend","plotly")
1.1.4 还原所有显示设置
pd.reset_option("^display")
1.2 数据概貌 1.2.1 查看数据维度
df = pd.read_csv('data.csv')
print(df.shape)
1.2.2 查看前5条数据
df = pd.read_csv('data.csv')
print(df.head())
1.2.3 查看后10条数据
df = pd.read_csv('data.csv')
print(df.tail(10))
1.2.4 随机查看8条数据
df = pd.read_csv('data.csv')
print(df.sample(8))
1.2.5 查看数据基本信息

包括:类型、行数、列数、列名、每列非空值元素个数、每列数据类型、所有列数据类型的数量、内存占用等

df = pd.read_csv('data.csv')
print(df.info())

输出结果:

RangeIndex: 105 entries, 0 to 104
Data columns (total 52 columns):
 #   Column                 Non-Null Count  Dtype  
---  ------                 --------------  -----  
 0   positionId             105 non-null    int64  
 1   positionName           105 non-null    object 
......
 50  aggregatePositionIds   105 non-null    object 
 51  famousCompany          105 non-null    bool   
dtypes: bool(1), float64(9), int64(16), object(26)
memory usage: 42.1+ KB
None
1.2.6 查看 数值型 列的统计信息
df = pd.read_csv('data.csv')
print(df.describe().round(2))
print(df.describe().round(2).T)
1.3 缺失值处理 1.3.1 查看各列缺失值
df = pd.read_csv('data.csv')
print(df.isna().sum())
print('----------')
print(df.isnull().sum())
1.3.2 查看缺失值合计数
df = pd.read_csv('data.csv')
print(df.isna().sum().sum())
print('----------')
print(df.isnull().sum().sum())
1.3.3 查看有缺失值的列
df = pd.read_csv('data.csv')
print(df.isna().any())
print('----------')
print(df.isnull().any())
1.3.4 查看有缺失值的行
df = pd.read_csv('data.csv')
print(df.isna().T.any())
print('----------')
print(df.isnull().T.any())
1.3.5 删除有缺失值的行
df = pd.read_csv('data.csv')
print(df.isna().T.any())
print('----------')
df.dropna(inplace=True)
print(df)
1.3.6 缺失值整体填充
df = pd.read_csv('data.csv', usecols=['positionId', 'positionName', 'businessZones', 'subwayline'])
df.columns = ['id', '职位', '工作地点', '地铁号']
print(df.isna().any())
print('----------')
print(df)
df.fillna('我是缺失值', inplace=True)
print(df)
1.3.7 缺失值填充为前行同列值,可以整体或整列填充
df = pd.read_csv('data.csv', usecols=['positionId', 'positionName', 'businessZones', 'salary', 'subwayline'])
df.columns = ['id', '职位', '工作地点', '薪资', '地铁号']
print(df.isna().any())
df.loc[[1,3], '薪资'] = np.nan
print('----------')
print(df)
# df.fillna(method='ffill', inplace=True)
df['薪资'].fillna(method='ffill', inplace=True)
print(df)
1.3.8 缺失值填充为后行同列值,可以整体或整列填充
df = pd.read_csv('data.csv', usecols=['positionId', 'positionName', 'businessZones', 'salary', 'subwayline'])
df.columns = ['id', '职位', '工作地点', '薪资', '地铁号']
print(df.isna().any())
df.loc[[1,3], '薪资'] = np.nan
print('----------')
print(df)
df.fillna(method='bfill', inplace=True)
# df['薪资'].fillna(method='bfill', inplace=True)
print(df)
1.3.9 缺失值填充为同列均值,只能填充数据列
df = pd.read_csv('data.csv', usecols=['positionId', 'positionName', 'businessZones', 'salary', 'subwayline'])
df.columns = ['id', '职位', '工作地点', '薪资', '地铁号']
print(df.isna().any())
df.loc[[1,3], '薪资'] = np.nan
print('----------')
print(df)
df['薪资'].fillna(df['薪资'].mean().round(0), inplace=True)
print(df)
1.3.9 缺失值填充为上下列均值,只能填充数据列
df = pd.read_csv('data.csv', usecols=['positionId', 'positionName', 'businessZones', 'salary', 'subwayline'])
df.columns = ['id', '职位', '工作地点', '薪资', '地铁号']
print(df.isna().any())
df.loc[[1,3], '薪资'] = np.nan
print('----------')
print(df)
df['薪资'].fillna(df['薪资'].interpolate().round(0), inplace=True)
print(df)
1.4 重复值处理 1.4.1 查找完全重复的行
df = pd.read_csv('data.csv', usecols=['positionId', 'positionName', 'businessZones', 'salary', 'subwayline'])
df.columns = ['id', '职位', '工作地点', '薪资', '地铁号']
# 查看重复值描述
print(df.duplicated().describe())
# 取出所有完全重复的行
print(df[df.duplicated()])
# 取出重复行的id
print(df[df.duplicated()]['id'].values[0])
# 根据id提取所有重复行
print(df[df['id'] == 6680900])
# 根据id提取所有重复行
print(df[df['id'] == df[df.duplicated()]['id'].values[0]])
1.4.2 查找某列重复的行
df = pd.read_csv('data.csv', usecols=['positionId', 'positionName', 'businessZones', 'salary', 'subwayline'])
df.columns = ['id', '职位', '工作地点', '薪资', '地铁号']
# 查看薪资列重复值描述
print(df.duplicated(['薪资']).describe())
# 取出薪资列重复的行
print(df[df.duplicated(['薪资'])])
# 取出薪资列重复行的id
print(df[df.duplicated(['薪资'])]['id'].values)
1.4.3 删除全部重复的行,默认保留第一次出现的值
df = pd.read_csv('data.csv', usecols=['positionId', 'positionName', 'businessZones', 'salary', 'subwayline'])
df.columns = ['id', '职位', '工作地点', '薪资', '地铁号']
# 查看全部行重复值描述
print(df.duplicated().describe())
# 删除全部重复行
df.drop_duplicates(inplace=True)
print(df)
1.4.4 删除某列重复的行,默认保留第一次出现的值
df = pd.read_csv('data.csv', usecols=['positionId', 'positionName', 'businessZones', 'salary', 'subwayline'])
df.columns = ['id', '职位', '工作地点', '薪资', '地铁号']
# 查看薪资列重复值描述
print(df.duplicated(['薪资']).describe())
# 删除薪资列重复的行
df.drop_duplicates(['薪资'], inplace=True)
print(df)
1.4.5 删除重复值,保留最后一次出现的值
df = pd.read_csv('data.csv', usecols=['positionId', 'positionName', 'businessZones', 'salary', 'subwayline'])
df.columns = ['id', '职位', '工作地点', '薪资', '地铁号']
# 查看薪资列重复值描述
print(df.duplicated(['薪资']).describe())
# 删除薪资列重复的行
df.drop_duplicates(['薪资'], inplace=True, keep='last')
print(df)
二、Pandas数据描述性分析 2.1 数据排序 2.1.1 按索引列排序
df = pd.read_csv('data.csv', usecols=['positionId', 'positionName', 'salary'])
df.columns = ['id', '职位', '薪资']
print(df)
df.set_index(['id'], inplace=True)
df.sort_index(inplace=True)
print(df)
2.1.2 按数据列的值排序,适用于数字和字符串等类型
df = pd.read_csv('data.csv', usecols=['positionId', 'positionName', 'salary'])
df.columns = ['id', '职位', '薪资']
print(df)
df.sort_values(by=['职位', '薪资'], ascending=False, inplace=True)
print(df.head(10))
2.1.3 提取数字型数据列的n个最大值:nlargest()
df = pd.read_csv('data.csv', usecols=['positionId', 'positionName', 'salary'])
df.columns = ['id', '职位', '薪资']
print(df)
df.nlargest(10, '薪资')
print(df.head(10))
2.1.4 提取数字型数据列最大值的索引:idxmax()
df = pd.read_csv('data.csv', usecols=['positionId', 'positionName', 'industryField', 'salary', 'score', 'matchScore'])
df.columns = ['id', '职位', '领域', '薪资', '热度', '得分']
df.set_index(['id', '职位'], inplace=True)
print(df)
print(df.dtypes)
print(df.loc[:, '薪资':].idxmax())
2.2 聚合统计 2.2.1 计算数字型数据列的均值:mean()
df = pd.read_csv('data.csv', usecols=['positionId', 'positionName', 'industryField', 'salary', 'score', 'matchScore'])
df.columns = ['id', '职位', '领域', '薪资', '热度', '得分']
print(df.mean())
print('-------------')
print(df.薪资.mean())
print(df['薪资'].mean())
print('-------------')
print(df[['薪资', '热度', '得分']].mean())
2.2.2 计算数字型数据列的中位数:median()
df = pd.read_csv('data.csv', usecols=['positionId', 'positionName', 'industryField', 'salary', 'score', 'matchScore'])
df.columns = ['id', '职位', '领域', '薪资', '热度', '得分']
print(df.median())
print('-------------')
print(df.薪资.median())
print(df['薪资'].median())
print('-------------')
print(df[['薪资', '热度', '得分']].median())
2.2.3 计算数字型数据列的众数:mode()
df = pd.read_csv('data.csv', usecols=['positionId', 'positionName', 'industryField', 'salary', 'score', 'matchScore'])
df.columns = ['id', '职位', '领域', '薪资', '热度', '得分']
print(df.mode())
print('-------------')
print(df.薪资.mode())
print(df['薪资'].mode())
print('-------------')
print(df[['薪资', '热度', '得分']].mode())
2.2.4 一次性统计数字型数据列的多个聚合指标:agg()
df = pd.read_csv('data.csv', usecols=['positionId', 'positionName', 'industryField', 'salary', 'score', 'matchScore'])
df.columns = ['id', '职位', '领域', '薪资', '热度', '得分']
print(df.agg('mean'))
print(df[[ '薪资', '热度', '得分']].agg('mean'))
print(df[[ '薪资', '热度', '得分']].agg(['min', 'mean', 'max']))
2.2.5 一次性统计数字型数据列的全部统计指标:describe()
df = pd.read_csv('data.csv', usecols=['positionId', 'positionName', 'industryField', 'salary', 'score', 'matchScore'])
df.columns = ['id', '职位', '领域', '薪资', '热度', '得分']
print(df.describe())
print(df[['薪资', '热度', '得分']].describe())
2.2.6 分组统计平均数
df = pd.read_csv('data.csv', usecols=['positionId', 'positionName', 'industryField', 'salary', 'score', 'matchScore'])
df.columns = ['id', '职位', '领域', '薪资', '热度', '得分']
print(df.groupby('职位').mean())
print(df.groupby('职位')['薪资'].mean())
print(df.groupby('职位').mean()['薪资'])
print(df.groupby('职位')['薪资', '热度', '得分'].mean())
# print(df.groupby('职位').mean()['薪资', '热度', '得分'])  # KeyError: ('薪资', '热度', '得分')
print(df.groupby('职位')[['薪资', '热度', '得分']].mean())
print(df.groupby('职位').mean()[['薪资', '热度', '得分']])
2.2.7 分组统计多个聚合指标
df = pd.read_csv('data.csv', usecols=['positionId', 'positionName', 'industryField', 'salary', 'score', 'matchScore'])
df.columns = ['id', '职位', '领域', '薪资', '热度', '得分']
print(df.groupby('职位')[['薪资', '热度', '得分']].agg(['min', 'max']))
2.2.8 统计相关系数
df = pd.read_csv('data.csv', usecols=['positionId', 'positionName', 'industryField', 'salary', 'score', 'matchScore'])
df.columns = ['id', '职位', '领域', '薪资', '热度', '得分']
print(df.corr())
print(df[['薪资', '热度', '得分']].corr())
2.2.9 统计数据频数
df = pd.read_csv('data.csv', usecols=['positionId', 'positionName', 'industryField', 'salary', 'score', 'matchScore'])
df.columns = ['id', '职位', '领域', '薪资', '热度', '得分']
df1 = df.value_counts()
df1 = df['领域'].value_counts()
df1 = df[['领域', '薪资']].value_counts()
print(df1)
print(df1.index)
print(df1.values)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/355024.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号