大采集处理技术 7_第1页
大采集处理技术 7_第2页
大采集处理技术 7_第3页
大采集处理技术 7_第4页
大采集处理技术 7_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

大数据采集与预处理技术*

*项目二图书信息数据采集与预处理序号软件配置要求1scrapy最新版本2redis最新版本一、项目目标:1、完成图书信息数据分布式采集环境安装配置;2、完成图书信息数据采集程序设计和数据采集;3、完成图书信息数据预处理清洗。4、完成图书信息数据文本标注。二、环境要求:任务二图书信息数据预处理一、任务目标1、理解常见的数据清洗方法和原理,根据模型训练要求,完成图书信息数据的缺失值、异常值和重复值处理。2、理解描述性变量转换为数值型数据的方法和用处,并完成图书信息数据的描述性变量转换。3、掌握数据标准化方法,了解文本数据训练集、测试集划分,完成图书信息数据的标准化和测试集划分。二、Pandas库1、简介:Pandas是一个基于Python的开源库,是处理结构化数据最常用的Python库,专门用于数据操作与分析。2、安装:#安装Pandaspipinstallpandas#或者通过conda安装(如果你使用Anaconda环境)condainstallpandas3、pandas的Series创建importpandasaspd #pandas导入s=pd.Series([1,3,5,7,9]) #方法一:通过列表创建s=pd.Series({'a':1,'b':3,'c':5}) #方法二:通过字典创建s=pd.Series(10,index=['a','b','c']) #方法三:通过标量创建(广播值)importnumpyasnp #方法四:通过NumPy数组创建s=pd.Series(np.random.randn(5),index=['a','b','c','d','e']) 4、pandas的Series操作——“增删改查统计”#通过标签选择数据,选择索引位置是“a”的数据print(s['a'])#通过位置选择数据,选择第0个位置的数据print(s[0])#多标签选择,选择索引位置是“a”和“c”的数据print(s[['a','c']])#布尔条件筛选,选择s中大于0的数据print(s[s>0])#修改标签“a”对应的数据值为100s['a']=100print(s.sum())#计算和print(s.mean())#计算均值print(s.min())#计算最小值5、pandas的dataframe#通过字典创建data={'Name':['Alice','Bob','Charlie'],'Age':[25,30,35],'City':['NewYork','LosAngeles','Chicago']}df=pd.DataFrame(data)#通过列表创建df=pd.DataFrame([['Alice',25,'NewYork'],['Bob',30,'LosAngeles'],['Charlie',35,'Chicago']],columns=['Name','Age','City'])#通过NumPy数组创建df=pd.DataFrame(numpy.random.randn(5,3),columns=['A','B','C'])6、pandas的dataframe操作print(df['Name']) #选择“Name”单列print(df[['Name','Age']]) #选择“Name”“Age”两列print(df.loc[0]) #选择第一行print(df.loc[0,'Name']) #选择第一行的"Name"列print(df.iloc[0]) #选择第一行print(df.iloc[0,1]) #选择第一行的第二列print(df[df['Age']>30]) #筛选年龄大于30的行df['Age']=df['Age']+1 #修改已有列,“age”列的值都加1df=df.drop('Salary',axis=1) #删除Salary列。axis默认是0,表示行三、数据读取1、安装数据库连接库pipinstallmysql-connector2、读数据库并创建pandas的dataframeimportmysql.connectorimportpandasaspd#创建数据库连接conn=mysql.connector.connect(host="localhost",user="your_username",password="your_password",database="your_database")#使用SQL查询读取数据query="SELECT*FROMmy_table"df=pd.read_sql(query,conn)#关闭连接conn.close()可以使用6,root,Lzc02m*nd试用。测试云服务器,请大家注意避免非法操作。pandas.read_sql(sql,con,index_col=None,coerce_float=True,columns=None)方法可以通过SQL查询读取数据,并将其直接转换为DataFrame对象。它的常用参数有:sql:接收string类型,可以是需要执行的SQL查询语句,或者是数据库表名称。con:数据库连接对象。index_col:可选,指定将某列作为索引。params:可选,参数化SQL查询。coerce_float:可选,默认True,将字符串转换为浮点数。例如,带有参数化查询的代码示例如下:query="SELECT*FROMmy_tableWHEREcolumn_name=%s"df=pd.read_sql(query,conn,params=['value'])conn.close()

3、存数据到数据库#table_name是数据库表名,conn是数据库连接对象#if_exist表示表已存在时的行为,replace(替换表),append(追加数据),fail(引发错误)#index是否将DataFrame的索引写入表中。df.to_sql(table_name,conn,if_exists='replace',index=False)4、SQLAlchemy连接数据库在使用Python的SQLAlchemy时,MySQL和Oracle数据库连接字符串的格式如下

数据库产品名+连接工具名://用户名:密码@数据库IP地址:数据库端口号/数据库名称?charset=数据库数据编码。importpymysqlfromsqlalchemyimportcreate_engine,text#存入数据库,注意表字段,用户root,密码P@ssw0rd,数据库名eshop,根据实际替换engine=create_engine('mysql+pymysql://root:P@ssw0rd@:3306/eshop')df.to_sql('table_name',engine) #df存入到表orders_newsql='select*fromorders_newlimit10'df=pd.DataFrame(engine.connect().execute(text(sql))) #读取表数据,并初始化df5、文件读写数据df=pandas.read_csv('data.csv') #读取CSV文件df=pandas.read_excel('data.xlsx',sheet_name='Sheet1') #读取Excel文件df=pandas.read_json('data.json') #读取JSON文件#写入CSV文件output.csvdf.to_csv('output.csv',index=False) #设置index=False索引不会写入文件#写入JSON文件output.json,records表示每行作为一个记录df.to_json('output.json',orient='records')#写入Excel文件output.xlsx,工作簿名是Sheet1df.to_excel('output.xlsx',sheet_name='Sheet1',index=False)6、数据查看df.head() #head()用于显示DataFrame的前几行数据显示,默认前5行数据() #查看各字段的信息,包括列名称、非空值计数、数据类型等df.shape #查看数据集有几行几列,data.shape[0]是行数,data.shape[1]是列数data.describe() #查看数据的大体情况,均值、标准差、最小值、四分位数等data.columns.tolist() #查看DataFrame的所有列名称df.index #查看DataFrame的索引信息谢谢!大数据采集与预处理技术*

*项目二图书信息数据采集与预处理序号软件配置要求1scrapy最新版本2redis最新版本一、项目目标:1、完成图书信息数据分布式采集环境安装配置;2、完成图书信息数据采集程序设计和数据采集;3、完成图书信息数据预处理清洗。4、完成图书信息数据文本标注。二、环境要求:任务二图书信息数据预处理一、任务目标1、理解常见的数据清洗方法和原理,根据模型训练要求,完成图书信息数据的缺失值、异常值和重复值处理。2、理解描述性变量转换为数值型数据的方法和用处,并完成图书信息数据的描述性变量转换。3、掌握数据标准化方法,了解文本数据训练集、测试集划分,完成图书信息数据的标准化和测试集划分。二、重复值处理pandas提供了一个名为drop_duplicates的去重方法。该方法只对DataFrame或者Series类型有效。这种方法不会改变数据原始排列,支持单一或几个特征的数据去重。pandas.DataFrame(Series).drop_duplicates(self,subset=None,keep='first',inplace=False)参数名称参数说明subset接收string或sequence。表示进行去重的列。默认为None,表示全部列。keep接收特定string。表示重复时保留第几个数据。First:保留第一个。Last:保留最后一个。False:只要有重复都不保留。默认为first。inplace接收boolean。表示是否在原表上进行操作。默认为False。假设df是dataframe对象,并且有“book_name”、“book_id”、“book_grade”列,使用drop_duplicates去除重复数据的示例代码如下所示:#使用dataframe的drop_duplicates方法去重unames=df['book_name'].drop_duplicates()#多个重复字段去重,多个字段值都重复时删除行shapeDet=df.drop_duplicates(subset=['book_id','book_grade']).shapeprint('去重之后表大小为:',shapeDet)#如果两行数据相似度为90%,则认为是重复值并删除#自定义函数来计算字符串的相似度fromdifflibimportSequenceMatcherdefsimilar(a,b):

returnSequenceMatcher(None,a,b).ratio()similarity_threshold=0.90 #设定相似度阈值rows_to_delete=[] #用于存储要删除的行索引#SequenceMatcher是Python标准库中difflib模块的一个类,它用于比较两个序列的相似度。以下是一些常用方法:1、ratio():返回序列之间的相似性比率,范围从0到1。2、quick_ratio():返回快速计算出的相似性比率。3、real_quick_ratio():返回更快速计算的相似性比率。#比较每一对行,为了计算速度设置从第800行开始foriinrange(800,len(df)):ifiinrows_to_delete:continueforjinrange(i+1,len(df)):ifsimilar(df.loc[i],df.loc[j])>=similarity_threshold:

rows_to_delete.append(j)print(j)#删除相似的行df_cleaned=df.drop(rows_to_delete)print(df_cleaned)三、缺失值处理数据中的某个或某些特征的值是不完整的,这些值称为缺失值。比如下图红框部分显示没有值。Pandas对应的方法: 1)识别缺失值的方法isnull(),如果对应的值是空,返回True,否则返回False。 2)识别非缺失值的方法notnull(),isnull和notnull之间结果正好相反。 print(df.isnull().tail(100))针对缺失值怎么处理?1、删除法2、替换法3、插值法1.1删除缺失值所在的行记录1.2删除缺失值所在的列2.1替换为固定值2.4替换为中位数2.2替换为均值2.5前后数据填充2.3替换为众数值3.1线性插值3.2多项式插值P:导致大量有效信息的丢失P:填充的数据不准确不处理:有的算法(贝叶斯、神经网络等)对缺失值不敏感,或者有些字段对结果分析作用不大pandas中提供了简便的删除缺失值的方法dropna,该方法既可以删除观测记录,亦可以删除特征。pandas.DataFrame.dropna(self,axis=0,how='any',thresh=None,subset=None,inplace=False)1.删除法参数名称说明axis接收0或1。表示轴向,0为删除观测记录(行),1为删除特征(列)。默认为0。how接收特定string。表示删除的形式。any表示只要有缺失值存在就执行删除操作。all表示当且仅当全部为缺失值时执行删除操作。默认为any。subset接收类array数据。表示进行去重的列∕行。默认为None,表示所有列/行。inplace接收boolean。表示是否在原表上进行操作。默认为False。#书名book_name、评分book_score任意一个是空值的行就删除df_dropna=df.dropna(axis=0,how="any",subset=["book_name","book_score"])#如果评论数book_grade、作者book_author都是空值就删除对应行df_dropna=df.dropna(axis=0,how="all",subset=["book_grade","book_author"])数据量较少时候,以最可能的值来插补缺失值,比删除全部不完全样本所产生的信息丢失要少。替换法主要有固定值填充、出现最频繁值填充、中位数/均值插补、用前后数据填充。假设df是Dataframe对象,并且有书名(book_name)、评分(book_score)、评论数(book_grade)、作者(book_author)等字段,则替换空值的示例代码如下所示:2.替换法#固定值填充,缺失值全部用0插补df=df.fillna(0) #作者列缺失值用固定值插补df['book_author']=data['book_author'].fillna('UNKNOWN')#出现最频繁值填充,即众数插补,离散/连续数据都行#mode返回出现最多的数据,book_score是“评分”字段freq_port=df.book_score.dropna().mode()[0]#采用出现最频繁的值插补df['book_score']=df['book_score'].fillna(freq_port)#中位数/均值插补,中位数填充适用于偏态分布或者有离群点的分布df['book_score'].fillna(df['book_score'].dropna().median(),inplace=True)#均值插补,适用于正态分布df['book_grade'].fillna(df['book_grade'].dropna().mean(),inplace=True)删除法简单易行,但是会引起数据结构变动,样本减少;替换法会影响数据的标准差,导致信息量变动。如果要克服上述问题可以使用插值法,常用的插值法有线性插值、多项式插值等。线性插值是针对已知的值求出线性方程,通过求解线性方程得到缺失值。假设df是爬虫采集的图书信息,有部分评论数book_grade字段缺失,这个字段和书评分book_score相关,则使用线性插值填充的示例代码如下:3.插值法#线性插值fromerpolateimportinterp1ddf_dropna=df.dropna() #先把空值行删除x=np.array(df_dropna["book_grade"].tolist()) #可以认为评论数book_grade是自变量y=np.array(df_dropna["book_score"].tolist()) #认为书评分book_score是因变量LinearInsValue=interp1d(x,y,kind='linear') #线性插值拟合x,yforiinrange(len(df)): #针对book_score值为空的记录找出其book_grade值ifpd.isna(df.iloc[i]['book_score']):g_value=df.iloc[i]['book_grade']s_value=LinearInsValue([g_value])df.iloc[i,df.columns.get_loc('book_score')]=s_value[0]多项式插值是利用已知的值拟合一个多项式,使得现有的数据满足这个多项式,再利用这个多项式求解缺失值,常见的多项式插值法有拉格朗日插值和牛顿插值等,一般针对有序的数据,如带有时间列的数据集,且缺失值为连续型数值小批量数据。假设df是爬虫采集的图书信息,有部分评论数book_grade字段缺失,这个字段和书评分book_score相关,则使用拉格朗日插值填充的示例代码如下:3.插值法fromerpolateimportlagrangedf_dropna=df.dropna(axis=0,how="any")x=np.array(df_dropna["book_score"].tolist()) #认为书评分book_score是自变量,与线性插值相反y=np.array(df_dropna["book_grade"].tolist()) #可以认为评论数book_grade是因变量LargeInsValue=lagrange(x[0:100],y[0:100]) #用前100条数据拟合拉格朗日插多项式foriinrange(len(df)): #针对book_score值为空的记录找出其book_grade值ifpd.isna(df.iloc[i]['book_grade'])andpd.notna(df.iloc[i]['book_score']):s_value=df.iloc[i]['book_score']g_value=LargeInsValue([s_value])#注意获取数据索引位置表达方法

df.iloc[i,df.columns.get_loc('book_grade')]=g_value[0]四、异常值处理这两张图像上哪些点可能是异常值?异常值是指样本中的个别值明显偏离它所属样本的其余观测值。如果计算分析过程的数据有异常值,会对结果会产生不良影响。检测异常值就是检验数据中是否有录入错误以及是否含有不合理的数据。常用方法:1)描述性统计法2)三西格玛法3)箱型图4)聚类、近邻度四、异常值处理1)描述性统计法描述性统计法是指找到与业务或者基本认知不符的数据,如书的评分为负数、人的年龄是大于200岁、物品售价小于0等,这些数值明显存在异常,但是是否是异常值,有时候需要根据应用场景确定。#与业务或者基本认知不符的数据,如年龄为负数,删除对应行foriinrange(len(df)):ifdf.iloc[i]['age']<0:

df.drop(i)#把提成senior、销售额sell_counts小于10000的记录对应置为10000columns_list=["senior","sell_counts"]foritemincolumns_list:ifdf.iloc[i]['senior']<10000:df.iloc[i,df.columns.get_loc('senior')]=10000

2)三西格玛法该法则先假设一组检测数据只含有随机误差,对原始数据进行计算处理得到标准差,按一定的概率确定一个区间,认为误差超过这个区间的就属于异常值。这种判别处理方法仅适用于对正态或近似正态分布的样本数据进行处理,如下表所示,其中σ代表标准差,μ代表均值,x=μ为图形的对称轴。数据的数值分布几乎全部集中在区间(μ-3σ,μ+3σ)内,超出这个范围的数据仅占不到0.3%。故根据小概率原理,可以认为超出3σ的部分数据为异常数据。三西格玛数值分布如下表所示:数值分布在数据中的占比(μ-σ,μ+σ)0.6827(μ-2σ,μ+2σ)0.9545(μ-3σ,μ+3σ)0.9973假设df是爬虫采集的图书信息,对图书评论数book_grade、评分book_score进行异常值查找,如果是异常值就进行删除,示例代码如下所示:neg_list=['book_grade','book_score']#当数值超出这个距离,可以认为它是异常值foriteminneg_list: df[item+'_zscore']=(df[item]-df[item].mean())/df[item].std() z_abnormal=abs(df[item+'_zscore'])>3foriinrange(len(z_abnormal)):ifz_abnormal[i]==True:df.drop(i)print("删除了第"+str(i)+'行数据')print(item+'中有'+str(z_abnormal.sum())+'个异常值')3)箱型图法箱型图提供了识别异常值的一个标准,即异常值通常被定义为小于QL-1.5IQR或大于QU+1.5IQR的值。QL称为下四分位数,表示全部观察值中有四分之一的数据取值比它小。QU称为上四分位数,表示全部观察值中有四分之一的数据取值比它大。IQR称为四分位数间距,是上四分位数QU与下四分位数QL之差,其间包含了全部观察值的一半。#要检查的列,一般只能是数值类型字段columns_list=["book_grade","book_score"]foritemincolumns_list: IQR=df[item].quantile(0.75)-df[item].quantile(0.25) #定义下界

q_abnormal_L=df[item]<df[item].quantile(0.25)-1.5*IQR #定义上界

q_abnormal_U=df[item]>df[item].quantile(0.75)+1.5*IQR print(item+'中有'+str(q_abnormal_L.sum()+q_abnormal_U.sum())+'个异常值')4)机器学习算法机器学习算法可以自动检测出异常数据点,常用的算法包括孤立森林、局部异常因子、One-ClassSVM等算法。孤立森林是一种基于树的无监督学习算法,通过随机划分特征空间,异常值在少数分割步骤中就会被孤立。局部异常因子通过计算数据点的局部密度与其邻居的密度比较,来识别异常值。One-ClassSVM尝试在高维空间中找到一个边界,区分正常点和异常点。下面以One-ClassSVM为例介绍图书数据df的异常值检测。提前安装sklearn依赖库可以使用pip命令,命令如下所示:pipinstallscikit-learn针对book_grade和book_scroe列异常值示例代码如下所示: fromsklearn.svmimportOneClassSVM#创建One-ClassSVM模型svm=OneClassSVM(nu=0.05,kernel="rbf",gamma=0.1)#nu参数控制异常值比例#训练模型svm.fit(df[['book_score','book_grade']])#预测异常值,返回1为正常点,-1为异常点df['outliers']=svm.predict(df[['book_score','book_grade']]])#筛选异常值outliers=df[df['outliers']==-1]print(outliers)五、描述性变量转换

数据分析模型中有相当一部分的算法模型都要求输入的特征为数值型,但实际数据中特征的类型不一定只有数值型,还会存在相当一部分的类别型,这部分的特征需要经过哑变量处理才可以放入模型之中。哑变量处理的原理示例如图。Python中可以利用pandas库中的get_dummies函数对类别型特征进行哑变量处理。pandas.get_dummies(data,prefix=None,prefix_sep='_',dummy_na=False,columns=None,sparse=False,drop_first=False)参数名称说明data接收array、DataFrame或者Series。表示需要哑变量处理的数据。无默认。prefix接收string、string的列表或者string的dict。表示哑变量化后列名的前缀。默认为None。prefix_sep接收string。表示前缀的连接符。默认为‘_’。dummy_na接收boolean。表示是否为Nan值添加一列。默认为False。columns接收类似list的数据。表示DataFrame中需要编码的列名。默认为None,表示对所有object和category类型进行编码。sparse接收boolean。表示虚拟列是否是稀疏的。默认为False。drop_first接收boolean。表示是否通过从k个分类级别中删除第一级来获得k-1个分类级别。默认为False。六、训练集测试集划分

在训练模型前大多需要对数据进行训练集和测试集划分,直接调用大部分机器学习库的train_test_split函数,也可以随机抽样选择。#方法一、直接调用train_test_split函数fromsklearn.model_selectionimporttrain_test_splitX=data.drop('标签列',axis=1) #X是特征列y=data['标签列'] #y是标签列X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3)#方法二:随机抽样#随机选数据作为测试集test_data=data.sample(frac=0.3,replace=False,random_state=123,axis=0)#frac是抽取30%的数据,replace是否为有放回抽样,取replace=True时为有放回抽样,axis=0是抽取行、为1时抽取列#在data中除去test_data,剩余数据为训练集train_data=(data.append(test_data)).drop_duplicates(keep=False)X_train=train_data.drop('目标列',1)X_test=test_data.drop('目标列',1)y_train=train_data['目标列']七、数据规范化

数据的规范化(normalization)是将数据按比例缩放,使之落入一个小的特定区间。在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权。很多算法或模型都对数据规范化有要求,例如SVM、KNN、KMeans、GBDT、AdaBoost、神经网络等。#最小最大规范化fromsklearn.preprocessingimportMinMaxScaler,StandardScalerx_scaler=MinMaxScaler()y_scaler=MinMaxScaler()#特征归一化x_train_sca=x_scaler.fit_transform(X_train)x_test_sca=x_scaler.transform(X_test)y_train_sca=y_scaler.fit_transform(pd.DataFrame(y_train))#零均值规范化scaler=StandardScaler()train=scaler.fit_transform(train)test=scaler.transform(test)谢谢!大数据采集与预处理技术*

*项目二图书信息数据采集与预处理序号软件配置要求1scrapy最新版本2redis最新版本一、项目目标:1、完成图书信息数据分布式采集环境安装配置;2、完成图书信息数据采集程序设计和数据采集;3、完成图书信息数据预处理清洗。4、完成图书信息数据文本标注。二、环境要求:任务二图书信息数据预处理一、任务目标1、理解常见的数据清洗方法和原理,根据模型训练要求,完成图书信息数据的缺失值、异常值和重复值处理。2、理解描述性变量转换为数值型数据的方法和用处,并完成图书信息数据的描述性变量转换。3、掌握数据标准化方法,了解文本数据训练集、测试集划分,完成图书信息数据的标准化和测试集划分。#1、读取爬取的图书数据并处理重复值importmysql.connectorimportpandasaspd

#创建数据库连接,注意链接参数需要根据实际自行替换conn=mysql.connector.connect(host="",user="root",password="P@ssw0rd",database="doubandb")#使用SQL查询读取数据query="SELECT*FROMitems"df=pd.read_sql(query,conn)#关闭连接conn.close()#重复值处理,如果书名相同就删除df_drop_duplicated=df.drop_duplicates(subset=['book_name'])print(df_drop_duplicated.shape)#①对“子连接”、“缩略图URL”、“出版时间”缺失值不做处理;#②对“书名”缺失的记录做删除处理;df_dropna=df_drop_duplicated.dropna(axis=0,how="any",subset=["book_name"])#③对“评论数量”、“评分”做线性插值处理;#线性插值,先由评论数推出评分fromerpolateimportinterp1dimportnumpyasnpimportre#去除book_score空值行df_new=df_dropna[(df_dropna['book_score']!="")&(df_dropna['book_grade']!="")]#可以认为评论数book_grade是自变量x=np.array(df_new["book_grade"].tolist())#提取数值,使用正则表达式extract_numbers=np.vectorize(lambdastr:int(re.findall(r'\d+',str)[0]))grade_values=extract_numbers(x)#认为书评分book_score是因变量,注意数据类型转换y=np.array(df_new["book_score"].tolist())score_values=np.char.strip(y).astype(float)#线性插值拟合x,yLinearInsValue=interp1d(grade_values,score_values,fill_value="extrapolate")#针对book_score值为空的记录找出其book_grade值foriinrange(len(df_dropna)):if(df_dropna.iloc[i]['book_score']=='')andpd.notna(df_dropna.iloc[i]['book_grade']):grade_value=int(re.findall(r'\d+',df.iloc[i]['book_grade'])[0]) #将book_grade转换为数值s_value=LinearInsValue([grade_value]) #线性拟合score值print("grade_value:{}vsscore_value:{}".format(grade_value,s_value))df_dropna.iloc[i,df_dropna.columns.get_loc('book_score')]=s_value[0] #将book_score缺失的值用拟合值填充#多项式插值,再由评分推出评论数fromerpolateimportlagrange#用前60条数据拟合拉格朗日插多项式,使用已有的LargeInsValue=lagrange(score_values[0:60],grade_values[0:60])#针对book_score值为空的记录找出其book_grade值foriinrange(len(df_dropna)):ifpd.isna(df_dropna.iloc[i]['book_grade'])and(df_dropna['book_score']!=""):s_value=df.iloc[i]['book_score'].strip().astype(float)g_value=LargeInsValue([s_value])#注意获取数据索引位置表达方法

df_dropna.iloc[i,df_dropna.columns.get_loc('book_grade')]=g_value[0]#④对“作者”、“作者简介”做直接关键字查找已经存在的记录值做填充处理foriinrange(len(df_dropna)):ifdf_dropna.iloc[i]['book_author']=='none':ifdf_dropna.iloc[i]['book_author_introduction']!='none':#查找简介相同、作者不为空的第1个”作者“姓名

book_author=df_dropna.loc[df_dropna['book_author_introduction']==df_dropna.iloc[i]['book_author_introduction']&(df_dropna['book_author']!="none"),'book_author'][0]df_dropna.iloc[i,df_dropna.columns.get_loc('book_author')]=book_authorifbook_authorisnotNoneelse"none"#再由“作者”填充“作者简介”,参照上面代码进行处理#⑤对“书的标签”、“简介”都用固定值“无”填充处理。foriinrange(len(df_dropna)):ifdf_dropna.iloc[i]["book_labels"].find("none")!=-1:df_dropna.iloc[i,df_dropna.columns.get_loc("book_labels")]="无"df_dropna["book_introduction"]=df_dropna["book_introduction"].fillna("无")#①对“子连接”、“缩略图URL”、“出版时间”、“作者简介”异常值不做处理;#②对“书名”、“作者”、“书的标签”、“简介”有任意是“none”的删除;df_drop1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论