【pandas】testdata数据集分析

一、数据集

数据集:资料,提取码:hp4i

二、实现

导包和准备工作

# -*- coding: utf-8 -*
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib

# 导入数据集
df = pd.read_excel('testdata.xls')
# 设置中文字体
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['font.family'] = 'sans-serif' 

1、查看数据类型、表结构、统计各字段缺失值个数

print(df.dtypes)
print(df.info())
df.isna().sum()

在这里插入图片描述
在这里插入图片描述

2、删除所有全为空的列及身份证号为空的数据

# 观察缺失值 发现细胞其它值是空列
del df['细胞其它值']
df.dropna(subset=['身份证号'],inplace=True)
df.isna().sum()

在这里插入图片描述

3、将“开始从事某工作年份”规范为4位数字年份,如’2008‘,并将列名修改为’参加工作时间‘

def trans(x):
    y=str(x).strip()[0:4]
    # 有个很坑的数据 年份是个小数 也要去掉
    if float(y)>=1000:
        return int(y)
df.rename(columns={'开始从事某工作年份':'参加工作时间'},inplace=True)
df.dropna(subset=['参加工作时间'],inplace=True)
df['参加工作时间']=df['参加工作时间'].apply(lambda x:trans(x))

4、添加列’工龄‘(体检年份-参加工作时间)和’年龄‘(体检时间-出生年份)两列。

df.dropna(subset=['体检年份'],inplace=True)
df.dropna(subset=['身份证号'],inplace=True)
df['体检年份']=df['体检年份'].apply(lambda x:int(str(x)[0:4]))
df['工龄']=df['体检年份']-df['参加工作时间']
df['年龄']=df['体检年份']-df['身份证号'].apply(lambda x:int(str(x)[4:8]))

5、统计不同性别的白细胞计数均值,画出柱状图

df.groupby('性别')['白细胞计数'].mean().plot.bar()
plt.show()

在这里插入图片描述

6、统计不同年龄段的白细胞计数,画出柱状图

def accu(x):
    if x<=30: return '小于等于30'
    elif x>30 and x<=40: return '大于30,小于40'
    elif x>40 and x<=50: return '大于40,小于50'
    else: return '大于50' 
df['年龄段']=df.apply(lambda x:accu(x['年龄']),axis=1)
df.groupby('年龄段')['白细胞计数'].mean().plot.bar()
plt.show()

在这里插入图片描述

三、完整代码

# -*- coding: utf-8 -*
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib


# 导入数据集
df = pd.read_excel('testdata.xls')
# 设置中文字体
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['font.family'] = 'sans-serif' 

# A
print(df.dtypes)
print(df.info())
df.isna().sum()

# B
del df['细胞其它值']
df.dropna(subset=['身份证号'],inplace=True)
df.isna().sum()
# c
def trans(x):
    y=str(x).strip()[0:4]
    if float(y)>=1000:
        return int(y)
df.rename(columns={'开始从事某工作年份':'参加工作时间'},inplace=True)
df.dropna(subset=['参加工作时间'],inplace=True)
df['参加工作时间']=df['参加工作时间'].apply(lambda x:trans(x))
# d
df.dropna(subset=['体检年份'],inplace=True)
df.dropna(subset=['身份证号'],inplace=True)
df['体检年份']=df['体检年份'].apply(lambda x:int(str(x)[0:4]))
df['工龄']=df['体检年份']-df['参加工作时间']
df['年龄']=df['体检年份']-df['身份证号'].apply(lambda x:int(str(x)[4:8]))
# e
df.groupby('性别')['白细胞计数'].mean().plot.bar()
plt.show()
# f
def accu(x):
    if x<=30: return '小于等于30'
    elif x>30 and x<=40: return '大于30,小于40'
    elif x>40 and x<=50: return '大于40,小于50'
    else: return '大于50' 
    
df['年龄段']=df.apply(lambda x:accu(x['年龄']),axis=1)
df.groupby('年龄段')['白细胞计数'].mean().plot.bar()
plt.show()
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值