点击跳转

(Click Mario)

正文

第二步,数据清洗。
清洗的逻辑很简单,就是把一些无效的数据、空数据清理掉。

同时做了如下的逻辑处理:

将一些无效数值置空并drop掉;  
增加一列数量:如果原因有多条,则计算分号的数量并加1,即表示有几个原因。并按照原因的数量划分比例,创建Amount列。  
考虑了一种情况,入职不足月的人员,工作时间是0.5月,没有年数,所以将此部分数据处理下增加年数。  
截取在职年份的年数值,并创建year列。  
将公司代码及省份merge进来。  
将年份分段。  
按照索引排列。  

实现代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
def dataframe_cleaning():
# 数据的初始清理;
df = pd.read_csv("./resign/resign.csv")
'''
依次对df数据做清理和整合:
1-2. 将一些无效数值置空并drop掉;
3. 增加一列数量:如果原因有多条,则计算分号的数量并加1,即表示有几个原因。并按照原因的数量划分比例,创建Amount列。
4. 考虑了一种情况,入职不足月的人员,工作时间是0.5月,没有年数,所以将此部分数据处理下增加年数。
5. 截取在职年份的年数值,并创建year列。
7. 将公司代码及省份merge进来。
8. 将年份分段。
9. 按照索引排列。
'''
df = df.replace(["4jjj", "ddsdhtjsr", "ootype"], np.nan)
df = df[["BUKRS", "REASON", "DETAIL", "WORKINGTIME", "SUGGESTION", "ZCRZ"]].dropna()
df01 = (1 / (df["REASON"].str.count(";")+1).rename("Amount")).round(2)
df["WORKINGTIME"].replace('0.5个月', '0年0.5个月', inplace=True)
df02 = df["WORKINGTIME"].str.split('年', expand=True).iloc[:,0].rename('year')
df = pd.concat([df[["BUKRS", "REASON", "SUGGESTION", "DETAIL", "ZCRZ"]], df01, df02], axis=1)
df = pd.merge(df, df_bukrs, on='BUKRS', right_index=True)
df['year'] = pd.cut(df.year.astype(int), bins=[0, 1, 5, 10, 100], right=False,
labels=["不足1年", "1-5年", "5-10年", "10年以上"])
df.sort_index(inplace=True)
# df.reset_index()
return df

使用pandas模块对于dataframe进行数据清理,挺高效的。
但是代码的使用,还是要研究几轮的。反正我是学习了好久,摊手~~