CV&NLP基础2之Pandas学习

Numpy用于操作数组,是一个计算库;Pandas是一个文件处理库。两者可以配合使用。
本文中所用文件: 链接: https://pan.baidu.com/s/1klhaDScMguNC7fIHOTlhRg 提取码: n366

关于文件编码问题说明(使用UTF-8)

Jupyter预览utf-8编码的文字才不会乱码;而Excel打开utf-8编码的csv文件会乱码

CSVtoUTF8文件编码相关

使用pandas.read_csv()读取csv文件

jupyter只能预览utf-8编码文件,所以指定编码为utf-8。根本目的是为了预览方便。

在这里插入图片描述

定位(基于上图三行四列表格操作)

如果数据有几万行,需要通过定位提取数据

.loc — 支持定位一个元素

提取索引为“0”的行,列名为“城市”的元素

在这里插入图片描述

.iloc — 更注重用索引来定位

使用.loc 定位时,“列”需要写明列名;使用.iloc 定位时,“列”也可用数字索引表示

在这里插入图片描述

行迭代 — .iterrows()

可以得到每行的下标和每行的行对象

在这里插入图片描述

注意,每行都是个“行对象”,这个对象有四个属性: 城市、猫、年龄、体重

现在,我们要把每个对象的属性值保存成列表:
在这里插入图片描述

列迭代

df_csv 其实是pandas的一种类

在这里插入图片描述

“df_csv.城市”是对象,但是下图直接列迭代没有索引,多了index参数也没有报错,如下图:
在这里插入图片描述

使用enumerate()强制给迭代对象加索引(很重要),如下图:
在这里插入图片描述

改数据

再放一张表格图,方便阅读:
在这里插入图片描述

在这里插入图片描述

这时候发现save.csv多了一列索引,查看函数说明要修改一个参数的默认值,记得先把之前的save.csv删掉,示例如下三图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

也可以使用columns参数指定需要保存的列:
在这里插入图片描述
在这里插入图片描述

关于jieba的例子

jieba用于将一个句子分成多个词

jieba是Python中一个重要的第三方中文分词函数库。
jieba 库支持3种分词模式:

  • 精确模式: 将句子最精确地切开,适合文本分析;
  • 全模式: 把句子中所有可以成词的词语都扫描出来,速度非常快,但是不能解决歧义;
  • 搜索引擎模式: 在精确模式基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。

jieba.lcut(x)
作用:精确模式,返回中文文本x分词后的列表变量。
参数:
x:中文文本字符串。

• jieba.lcut(x, cut_all=True)
作用:全模式,返回中文文本x分词后的列表变量。
参数:
x:中文文本字符串。

• jieba.lcut_for_search(x)
作用:搜素引擎模式,返回中文文本x分词后的列表变量。
参数:
x:中文文本字符串。

• jieba.add_words(w)
作用:向分词词典中增加新词 w。
参数:
w:中文单词。

例子🌰1:

import jieba
s ="中国特色社会主义进入新时代,我国社会主要矛盾已经转化为人民日益增长的美好\
生活需要和不平衡不从分的发展之间的矛盾。"
n = len(s)
m = len(jieba.lcut(s))
print("中文字符数{},中文词语数{}。".format(n,m))
 
print("**************01***************")
k = jieba.lcut(s)
print(k)
print("**************02***************")
k1 = jieba.lcut(s,cut_all=True)
print(k1)
print("***************03**************")
k2 = jieba.lcut_for_search(s)
print(k2)

在这里插入图片描述

例子🌰2: 注意pandas中所用txt文本一定要保证每句话是独立的,也就是说要打字打完一句话要主动换行

text_data = '''世界卫生组织秘书长谭德塞13日说,欧洲已成为新冠肺炎“大流行”的“震中”。目前欧洲报告的新冠肺炎确诊和死亡病例超过中国以外其他国家和地区的总和,每天报告的病例比中国疫情流行高峰时还要多。
虽然世卫组织的警钟已经敲得震天响,但是身在“震中”的一些欧洲国家却只是采取了一些轻描淡写的措施,不过,这些“低调”的措施却让本国国民很焦虑。
比如,瑞典公共卫生局12日宣布,将改变新冠病毒检测政策,不再给轻症和疑似患者进行检测。瑞典公共卫生局微生物研究部门负责人维塞尔解释说,只对那些确实需要治疗和已经住院的人进行新冠病毒检测,是为了把有限的资源用于医护人员、已住院患者等高危人群。
这种在病毒面前主动缴械投降,对疫情扩散采取“鸵鸟政策”的做法并非瑞典独有,另外一个欧洲大国英国的做法更是饱受本国民众诟病。
英国政府在疫情加速蔓延之际,于12日宣布疫情应对措施从“遏制”阶段进入“延缓”阶段。进入“延缓”阶段后,政府的目标是尽可能降低疫情带来的影响,并把疫情高峰期出现的时间延后,错开当前流感季,降低本地卫生系统的压力。
具体来说,新措施就是,无论之前是否去过疫情严重的国家,无论是否跟确诊感染者有过接触,出现症状者要在家自我隔离一周。许多民众之前呼吁取消大型公众活动、关闭校园,但这些措施都没有实施。英国首相约翰逊在记者会上淡定地表示,疫情还会继续蔓延,“更多家庭会失去亲人”。
有评论认为,英国政府的延缓战略建立在“群体免疫”原则上,即让更多英国人接触病毒,从而获得群体免疫。很多民众对此感到愤怒,认为这将以牺牲一部分人的生命为代价。《柳叶刀》主编也怒批“政府和公众赌轮盘”。
这些国家的做法完全违背世卫组织的如下建议:做好检测和治疗,为打破传播链,尽早发现、隔离、检测、处理每个病例;隔离病人及其接触者,取消体育赛事,减少社交活动等。
部分欧洲国家为何无视世卫组织的建议,反其道而行之?原因有以下三点:
第一,思想上麻痹大意,过于轻敌,白白浪费了中国付出巨大牺牲为全球抗疫争取的窗口期。在中国暴发疫情初期,很多西方国家隔岸观火,事不关己,高高挂起,在宝贵的窗口期无所作为。而且,一些国家的领导人和专家一再告诉民众,新冠肺炎不过就是“大号流感”,不必恐慌,这种迷之自信的操作白白浪费了至少一二十天时间。更有甚者,很多西方主流媒体和政客被偏见障目,对中国采取的行之有效的管控和隔离措施冷嘲热讽,却没有认识到中国经验行之有效。等灾难降临,疫情迅速蔓延,他们束手无策,只好慌乱之中强装镇定。
第二,很多西方国家的治理模式存在缺陷,导致在一些问题上无法作为。正如瑞典首都斯德哥尔摩地区政府新闻官贝里隆德12日所承认的:“我们已没有可能阻止新冠病毒的传播,也无法跟踪所有被感染的人。”
第三,西方国家虽然言必称人权,经常对别国人权状况指手画脚,但是生命权是最基本、最重要的人权,而很多西方政府在疫情肆虐的当下却漠视这一点,反而以“以金钱为中心”。在危机面前,中国政府为了人民健康,不惜为中国经济按下暂停键,集中精力抗击疫情,最大限度救治患者。但是,很多西方国家很难做到这一点,西方政府和政党背后的利益集团无力承担停产停工造成的经济损失。以至于有英国网民发帖认为,英国政府任由疫情蔓延,就是为了淘汰经济上的弱势群体,置老人和穷人的死活于不顾。
美国总统特朗普在被批评行动不力、应对迟缓多日之后,于13日宣布“国家紧急状态”,以应对疫情。希望某些欧洲国家也能够更快行动起来,集中更多资源,采取更多有力、高效的措施,早日打赢疫情防控战,保障民众健康。'''

在这里插入图片描述

有时候我们也想过滤掉一些不要的词,像标点符号、“但是”、“而是”,这些词称为停用词,这里测试使用的停用词见文章最上面百度网盘链接文件里面的stoplist.txt:
那么我先读取一下stoplist.txt看一下里面的词:

file = open("./data/stoplist.txt", "r", encoding='utf-8') #使用python内置读取文件的函数
lines = file.readlines() #按行获取文件中的文字,lines是一个列表
stop_words_list = [danci.strip() for danci in lines] #使用列表生成式去除lines中元素的空格
stop_words_list

在这里插入图片描述

下面例子去除上面text_data文字中的停用词:
注意下面循环中需要用到列表的拷贝,不然会报错,看一下这篇文章

tokenized = jieba.lcut(text_data) #tokenized是列表,来自于对text_data文本进行jieba分词
print("未去除停用词前tokeninzed列表中的元素个数: ", len(jieba.lcut(text_data)))

tokenized_duplicate = tokenized[:]
for word in tokenized_duplicate: #循环将tokenized中的一个单词与stoplist.txt中所有停用词作比较,并在每次循环的时候使用列表的拷贝解决报错
    for st_word in stop_words_list:
        if word == st_word:
            if word in tokenized: #stoplist.txt中有很多重复单词,没有这句会报错
                tokenized.remove(word)

print("去除停用词后tokeninzed列表中的元素个数: ", len(tokenized))

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值