1 pandas综合案例-运动员信息数据
1.1 查看数据
导入数据:
import numpy as np import pandas as pd
查看数据-运动员信息采集01.csv
数据下载地址:
https://download.csdn.net/download/m0_38139250/86789510
下载后解压到工程目录下即可
file_one = pd.read_csv('file:运动员信息采集01.csv', encoding='gbk') file_one
输出为:
查看数据-运动员信息采集02.excel
file_two = pd.read_excel('file:运动员信息采集02.xlsx',engine="openpyxl") file_two
输出为:
合并数据
# 采用外连接的方式合并数据 all_data = pd.merge(left=file_one,right=file_two, how='outer') all_data
输出为:
1.2 数据处理与分析
筛选出国籍为中国的运动员
# 筛选出国籍为中国的运动员 all_data = all_data[all_data['国籍'] == '中国'] all_data
输出为:
查看DataFrame类对象的摘要
# 查看DataFrame类对象的摘要,包括各列数据类型、非空值数量、内存使用情况等 all_data.info()
输出为:
检测all_data中是否有重复值
# 检测all_data中是否有重复值 all_data[all_data.duplicated().values==True] • 1 • 2
输出为:
删除all_data中的重复值
# 删除all_data中的重复值,并重新对数据进行索引 all_data = all_data.drop_duplicates(ignore_index=True) all_data.head(10)
输出为:
筛选出项目为篮球的运动员并访问“出生日期”一列的数据
# 筛选出项目为篮球的运动员 basketball_data= all_data[all_data['项目'] == '篮球'] # 访问“出生日期”一列的数据 basketball_data['出生日期']
输出为:
修改出生日期列
import datetime basketball_data = basketball_data.copy() # 将以“x”天显示的日期转换成以“x年x月x日”形式显示的日期 initial_time = datetime.datetime.strptime('1900-01-01', "%Y-%m-%d") for i in basketball_data.loc[:, '出生日期']: if type(i) == int: new_time = (initial_time + datetime.timedelta(days=i)).strftime('%Y{y}%m{m}%d{d}').format(y='年', m='月', d='日') basketball_data.loc[:, '出生日期'] = basketball_data.loc[:, '出生日期'].replace(i, new_time) # 为保证出生日期的一致性,这里统一使用只保留到年份的日期 basketball_data.loc[:, '出生日期'] = basketball_data['出生日期'].apply(lambda x:x[:5]) basketball_data['出生日期'].head(10)
输出为:
筛选男篮运动员
# 筛选男篮球运动员 male_data = basketball_data[basketball_data['性别'].apply(lambda x :x =='男')] male_data = male_data.copy() # 计算身高平均值(四舍五入取整) male_height = male_data['身高'].dropna() fill_male_height = round(male_height.apply(lambda x : x[0:-2]).astype(int).mean()) fill_male_height = str(int(fill_male_height)) + '厘米' # 填充缺失值 male_data.loc[:, '身高'] = male_data.loc[:, '身高'].fillna(fill_male_height) # 为方便后期使用,这里将身高数据转换为整数 male_data.loc[:, '身高'] = male_data.loc[:, '身高'].apply(lambda x: x[0:-2]).astype(int) # 重命名列标签索引 male_data.rename(columns={'身高':'身高/cm'}, inplace=True) male_data
输出为:
筛选女篮球运动员数据
# 筛选女篮球运动员数据 female_data = basketball_data[basketball_data['性别'].apply( lambda x :x =='女')] female_data = female_data.copy() data = {'191cm':'191厘米','1米89公分':'189厘米','2.01米':'201厘米', '187公分':'187厘米','1.97M':'197厘米','1.98米':'198厘米', '192cm':'192厘米'} female_data.loc[:, '身高'] = female_data.loc[:, '身高'].replace(data) # 计算女篮球运动员平均身高 female_height = female_data['身高'].dropna() fill_female_height = round(female_height.apply(lambda x : x[0:-2]).astype(int).mean()) fill_female_height =str(int(fill_female_height)) + '厘米' # 填充缺失值 female_data.loc[:, '身高'] = female_data.loc[:, '身高'].fillna(fill_female_height) # 为方便后期使用,这里将身高数据转换为整数 female_data['身高'] = female_data['身高'].apply(lambda x : x[0:-2]).astype(int) # 重命名列标签索引 female_data.rename(columns={'身高':'身高/cm'}, inplace=True) female_data
输出为:
替换数据
# 替换数据 female_data.loc[:, '体重'] = female_data.loc[:, '体重'].replace({'88千克': '88kg'}) female_data
输出为: