#python数据清洗操作
#1-1 pandas进行数据缺失值的预处理
import pandas as pd
import numpy as np
date=pd.date_range("20200101",periods=6)
df=pd.DataFrame(np.random.randn(6,4),index=date,columns=list("ABCD")) #创建一个数据框
print(df)
df1=df.reindex(index=date[0:4],columns=list(df.columns)+["E"])
df1.loc[date[0]:date[1],"E"]=1
print(df1)
#表格数据转换为numpy二维数据
n=np.array(df1)
print(n)
#删除含有缺失值的行(axis=1为删除列)
df2=df1.dropna(how="any",axis=0)
print(df2)
#对缺失值进行固定值填补/中值填充
df2=df1.fillna(value=5)
print(df2)
#对缺失值进行均值的填充
df2=df1.fillna(df["A"].mean())
print(df2)
#1-2 小文本和字符串的处理-
#1利用一些字符串的Python函数
#去除空格
char=" lo hello world "
c=char.strip()
print(c)
#字符串分割函数
char="machine,learning,is,learning"
c=char.split(",")
print(c)
#拼接:列表转字符串,符号替换
c=",".join(c)
print(c)
#字符串替换
c=char.replace(","," ")
print(c)
print(char)
#2使用正则表达式-re模块
import re
#compile函数-编译正则表达式
#re.compile(pattern,flag=0)
text1="lebron is a sllight good person,he is cool"
rr=re.compile(r'\w*oo\w*')
print(rr.findall(text1))
#match函数:从字符串首开始匹配
#re.match(pattern,string,flag=0)
print(re.match("com","com.louwill.con").group())
#re.search字符串匹配函数
#re.sub(pattern,repl,string,count)查找并且替换字符串
print(re.sub("oo","hh","he is a good boy,and is cool",1))
#招聘数据的实际数据清洗过程-零散性处理代码步骤
import numpy as np
import pandas as pd
import warnings
warnings.filterwarnings("ignore")
data1=pd.read_csv("D:\Byrbt2018\Study\Python机器学习全流程项目实战精讲\配套课件\第四讲 数据清洗与预处理\data_analysis.csv",encoding="gbk")
data2=pd.read_csv("D:\Byrbt2018\Study\Python机器学习全流程项目实战精讲\配套课件\第四讲 数据清洗与预处理\data_mining.csv",encoding="gbk")
data3=pd.read_csv("D:\Byrbt2018\Study\Python机器学习全流程项目实战精讲\配套课件\第四讲 数据清洗与预处理\deep_learning.csv",encoding="gbk")
data4=pd.read_csv("D:\Byrbt2018\Study\Python机器学习全流程项目实战精讲\配套课件\第四讲 数据清洗与预处理\machine_learning.csv",encoding="gbk")
print(data1)
print(data4.shape)
#表格数据的横向合并,列对齐不变
data=pd.concat((pd.concat((pd.concat((data1,data2)),data3)),data4)).reset_index(drop=True)
print(data.shape)
data.to_csv("all data.csv")
print(data.head())
print(data.info()) #输出数据的基本信息描述
#首先进行缺失值的填补工作
print(data["address"].value_counts())
data["address"]=data["address"].fillna('["未知"]')
print(data["address"][:5])
#去掉字符串数据中的一些中括号符号"[]"-表格数据行列数据常见的遍历方式
for i,j in enumerate(data["address"]):
j=j.replace("[","").replace("]","")
data["address"][i]=j
print(data["address"][:5])
for i,j in enumerate(data["industryLables"]):
j=j.replace("[","").replace("]","")
data["industryLables"][i]=j
print(data["industryLables"][:5])
for i,j in enumerate(data["label"]):
j=j.replace("[","").replace("]","")
data["label"][i]=j
print(data["label"][:5])
#先补充缺失值再进行数据的替换
print(data["position_detail"][:5])
data["position_detail"]=data["position_detail"].fillna('"未知"')
for i,j in enumerate(data["position_detail"]):
j=j.replace("\r","")
data["position_detail"][i]=j
print(data["position_detail"][:5])
import string
print(data["salary"][:11])
print(data["salary"])
#salary数据处理
print(data["salary"].value_counts())
for i,j in enumerate(data["salary"]):
j=j.replace("k","").replace("K","").replace("以上","-0") #进行不符合实际情况数据的字符串的替换
j=j.split("-")
j1=int(j[0])
j2 =int(j[1])
j3=(j1+j2)/2
data["salary"][i]=j3*1e3
print(data["salary"][:5])
#表格或者数据的各个数据含量统计
print(data["salary"].value_counts())
print(data["stage"].value_counts())
print(data["work_year"].value_counts())
for i,j in enumerate(data["position_name"]):
if "数据分析" in j:
j="数据分析师"
if "数据挖掘" in j:
j="数据挖掘工程师"
if "机器学习" in j:
j = "机器学习工程师"
if "深度学习" in j:
j="深度学习工程师"
data["position_name"][i]=j
print(data["position_name"][:5])
print(data["position_name"].value_counts())
#代码进行组合和封装
import numpy as np
import pandas as pd
import warnings
class data_clean(object):
def __init__(self):
pass
#数据获取方法
def get_data(self):
data1 = pd.read_csv("D:\Byrbt2018\Study\Python机器学习全流程项目实战精讲\配套课件\第四讲 数据清洗与预处理\data_analysis.csv",
encoding="gbk")
data2 = pd.read_csv("D:\Byrbt2018\Study\Python机器学习全流程项目实战精讲\配套课件\第四讲 数据清洗与预处理\data_mining.csv", encoding="gbk")
data3 = pd.read_csv("D:\Byrbt2018\Study\Python机器学习全流程项目实战精讲\配套课件\第四讲 数据清洗与预处理\deep_learning.csv",
encoding="gbk")
data4 = pd.read_csv("D:\Byrbt2018\Study\Python机器学习全流程项目实战精讲\配套课件\第四讲 数据清洗与预处理\machine_learning.csv",
encoding="gbk")
data = pd.concat((pd.concat((pd.concat((data1, data2)), data3)), data4)).reset_index(drop=True)
return data
#数据清洗方法
def clean_operation(self):
data=self.get_data()
data["address"] = data["address"].fillna('["未知"]')
for i, j in enumerate(data["address"]):
j = j.replace("[", "").replace("]", "")
data["address"][i] = j
for i, j in enumerate(data["industryLables"]):
j = j.replace("[", "").replace("]", "")
data["industryLables"][i] = j
for i, j in enumerate(data["label"]):
j = j.replace("[", "").replace("]", "")
data["label"][i] = j
# 先补充缺失值再进行数据的替换
data["position_detail"] = data["position_detail"].fillna('"未知"')
for i, j in enumerate(data["position_detail"]):
j = j.replace("\r", "")
data["position_detail"][i] = j
# salary数据处理
for i, j in enumerate(data["salary"]):
j = j.replace("k", "").replace("K", "").replace("以上", "-0") # 进行不符合实际情况数据的字符串的替换
j = j.split("-")
j1 = int(j[0])
j2 = int(j[1])
j3 = (j1 + j2) / 2
data["salary"][i] = j3 * 1e3
for i, j in enumerate(data["position_name"]):
if "数据分析" in j:
j = "数据分析师"
if "数据挖掘" in j:
j = "数据挖掘工程师"
if "机器学习" in j:
j = "机器学习工程师"
if "深度学习" in j:
j = "深度学习工程师"
data["position_name"][i] = j
return data
#实例化一个对象
opt=data_clean()
data=opt.clean_operation()
print(data.head())