响应式官方网站,网站取源用iapp做软件,景安安装wordpress,深圳定制建站网站建设近期需要获取某网站上的文章标题#xff0c;并对文章来源以及不同来源的文章数量进行分析。已通过爬虫完成对文章标题、日期和文章链接的爬取#xff0c;并存入pandas中的dataframe中#xff0c;准备进行下一步的分析。 该网站一般情况下#xff0c;文章标题前两个字是信息… 近期需要获取某网站上的文章标题并对文章来源以及不同来源的文章数量进行分析。已通过爬虫完成对文章标题、日期和文章链接的爬取并存入pandas中的dataframe中准备进行下一步的分析。 该网站一般情况下文章标题前两个字是信息来源地区也有少数不规范的但信息来源地区一定会在标题中出现。想到的办法就是写一个add_city函数判断标题前两个字是否是地区名称如果是就用前两个字作为dataframe中的新建列”地区“中的数据如果不是就在城市列表中查找对应哪个城市仅涉及特定的十几个城市找到城市地区名称用该数据作为”城市“列的数据。
def add_city(df):city str(df[标题])[0:1]if city in citylist:return cityelse:for i in citylist:if i in str(df[标题]):return ireturn None apply函数是pandas中最强大的函数首先想到的是用apply函数和add_city函数配合完成这个任务。
df[城市] df.apply(add_city,axis1) 然而程序却无法正常运行显示错误TypeError: Must provide func or tuples of (column, aggfunc). 后来才知道是自己的用法不对。将原有的程序代码更改为下面的程序运行正常了。因为生成”城市“列的数据只用到dataframe中的一列“标题应标明直接只需对df[标题]进行处理没必要用df。由于只有一列无需考虑太多参数了每行只需处理传递到函数中的一个数据参数。
def add_city(s):city str(s[0:1])if city in citylist:return cityelse:for i in citylist:if i in s:return ireturn None
df[城市] df[标题].apply(add_city)
有意思的是在定义add_city函数时有参数s在通过apply使用函数时不需要在add_city后面指定参数也许是apply的意思就是把apply前面的对象作为参数直接应用在后面的函数中去吧。
对照官方的说明再看看自己的程序感觉
1、Dataframe不一定非要是全部的把需要处理的列单独列出代码会更简洁
2、self对应着前面的DataFrame也就是传递到func函数中的第一个参数
3、既然DataFrame是传递到func函数的第一个参数那后面的arg(...,...)只能是func函数中的其他参数了。
4、apply默认对列进行处理
5、越是参数多功能强大的函数越要多试一下不然会走很多弯路。
DataFrame.apply(self, func, axis0, rawFalse, result_typeNone, args(), **kwds
func 代表的是传入的函数或 lambda 表达式
axis 参数可提供的有两个该参数默认为0/列
0 或者 index 表示函数处理的是每一列
1 或 columns 表示处理的是每一行;
raw bool 类型默认为 False;
False 表示把每一行或列作为 Series 传入函数中
True表示接受的是 ndarray 数据类型
apply() 最后的是经过函数处理数据以 Series 或 DataFrame 格式返回。