import pandas as pd
import numpy as np
df = pd.read_excel('testdata.xls')
df.head()
df.dtypes
df.isna().sum()
df.isna()
del df['细胞其它值'] # df.drop()
df
df.dropna(subset = ['身份证号'], inplace = True) #dropna()对数据结构中有值为空的行进行删除,subset:在特定列对缺失值处理
df.isna().sum() #显示缺失值的个数
def time(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:time(x)) #apply():当一个函数的参数存在于一个元组或者一个字典中时,用来间接的调用这个函数,并将元组或者字典中的参数按照顺序传递给参数
# lambda 参数:操作(参数)
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]))
df.head()
%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family'] = 'simhei' #matplotlib默认不支持中文字符,需设置
df.groupby('性别')['白细胞计数'].mean().plot.bar() #groupby()分组分析
plt.show()
def tongji(x):
if x <= 30:
return '小于或等于30岁'
elif x > 30 and x <= 40:
return '31岁至40岁'
elif x > 40 and x <= 50:
return '41岁至50岁'
else:
return '50岁以上'
df['年龄段'] = df.apply(lambda x : tongji(x['年龄']), axis = 1)
df.groupby('年龄段')['白细胞计数'].mean().plot.bar()
plt.show()