pd.read_csv/jieba.analyse.set_stop_words

#目前网上能找到的方法都是自己做个停用词字典,然后在打印分词结果之前将停用词去掉。#也就是说分词的过程不变,打印时做个集合差运算。text =u’听说你超级喜欢万众掘金小游戏啊啊啊’
default_mode = jieba.cut(text,cut_all=False)
stopw = [line.strip().decode(‘utf-8’) for line in open(‘D:\Python27\stopword.txt’).readlines()]
print u’搜索引擎模式:’,u’/’.join(set(default_mode)-set(stopw))

#除了效率低,这种方法有另一个弊端,就是你的停用词一定要被分词器正确的拆分,否则是没办法去掉的。#比如“啊啊啊”这个词是被分成一个词的,但是你的停用词字典中只有“啊”没有“啊啊啊”,#这个时候“啊啊啊”就不会被去掉。#所幸这个问题实际使用时影响是有限的,通过丰富你的停用词字典和反复测试,可以有效改善。另外一个方法是使用extract_tags函数,这个函数会根据TF-IDF算法将特征词提取出来,在提取之前会去掉停用词,可以人工指定停用词字典,代码如下:jieba.analyse.set_stop_words(‘D:\Python27\stopword.txt’)
tags = jieba.analyse.extract_tags(text,20)

pandas读取csv文件数据的方法及注意点

泰克尼客
1
2018.07.17 11:28:26
字数 904
阅读 94,529
pandas是一个高效的数据分析工具。基于其高度抽象的数据结构DataFrame(点击这里了解DataFrame数据结构),几乎可以对数据进行任何你想要的操作。

由于现实世界中数据源的格式非常多,pandas也支持了不同数据格式的导入方法,本文介绍pandas如何从csv文件中导入数据。

数据导入到pandas

从上图可以看出,我们要做的工作就是把存储在csv格式中的数据读入并转换成DataFrame格式。
pandas提供了一个非常简单的api函数来实现这个功能:read_csv()。

  1. 通过read_csv接口读入csv文件中的数据
    下面是一个简单的示例:

import pandas as pd

CSV_FILE_PATH = ‘./test.csv’
df = pd.read_csv(CSV_FILE_PATH)
print(df.head(5))
只要简单地指定csv文件的路径,便可以得到DataFrame格式的数据df。对于理想情况下的数据,导入过程就是这么简单!

下面考虑这种情况:假设csv文件头部有几个无效行,那么打印出来的结果可能如下所示:

                  1          2      3       4

0 datetime host hit volume
1 2018-07-24 09:00:00 weibo.com 20 1020
2 2018-07-25 09:00:00 qq.com no 20 1028
3 2018-07-26 19:00:00 sina.com 25 1181
4 2018-07-27 21:00:00 sohu.com 15 4582
pandas把【1,2,3,4】这组无效数据当作了column name;而实际上,我们更偏向于将【datetime,host,hit,volume】这组数据当作column name。对于这种情况,read_csv()函数提供了一个参数:skiprows,用于指定跳过csv文件的头部的前几行。在这里,我们跳过1行即可。

import pandas as pd

CSV_FILE_PATH = ‘./test.csv’
df = pd.read_csv(CSV_FILE_PATH, skiprows=1)
print(df.head(5))
得到的结果如下所示:

          datetime       host    hit  volume

0 2018-07-24 09:00:00 weibo.com 20 1020
1 2018-07-25 09:00:00 qq.com no 20 1028
2 2018-07-26 19:00:00 sina.com 25 1181
3 2018-07-27 21:00:00 sohu.com 15 4582

  1. 处理csv文件中的无效数据
    pandas可以自动推断每个column的数据类型,以方便后续对数据的处理。还以上文中的数据为例,通过如下代码:

import pandas as pd

CSV_FILE_PATH = ‘./test.csv’
df = pd.read_csv(CSV_FILE_PATH)
print(df.head(5))
print('datatype of column hit is: ’ + str(df[‘hit’].dtypes))
得出的结果:

          datetime       host  hit  volume

0 2018-07-24 09:00:00 weibo.com 20 1020
1 2018-07-25 09:00:00 qq.com 20 1028
2 2018-07-26 19:00:00 sina.com 25 1181
3 2018-07-27 21:00:00 sohu.com 15 4582
datatype of column hit is: int64
pandas将hit这一列的数据类型判定为了int64,这显然方便未来我们对于该列数据的运算。
但是在实际情况中,我们经常会面临数据缺失的问题,如果出现这种情况,我们往往会用一些占位符来表达。假设,我们用missing这个占位符来表示数据缺失,仍使用上述代码,来探索下会发生些什么:

          datetime       host      hit   volume

0 2018-07-24 09:00:00 weibo.com 20 1020
1 2018-07-25 09:00:00 qq.com 20 1028
2 2018-07-26 19:00:00 sina.com missing missing
3 2018-07-27 21:00:00 sohu.com 15 4582
datatype of column hit is: object
由于hit这一列中出现了missing这个字符串,pandas将hit这一列的数据类型判断成了object。这会给我们对该列数据的运算带来影响。例如,假设我们要计算hit列前两行数据的和,代码如下:

print(df[‘hit’][0] + df[‘hit’][1])
结果是:

2020
本来我们想要的是数学运算结果,但得到的却是一个字符串拼接结果。这就是由于数据类型判断失误带来的严重影响。
对于这种情况,read_csv()函数也提供了一个简单的处理方式,只需要通过na_value参数指定占位符,pandas便会在读入数据的过程中自动将这些占位符转换成NaN,从而不影响pandas对column数据类型的正确判断。
示例代码:

import pandas as pd

CSV_FILE_PATH = ‘./test.csv’

df = pd.read_csv(CSV_FILE_PATH, skiprows=0, na_values=[‘missing’)
print(df.head(5))
print('datatype of column hit is: ’ + str(df[‘hit’].dtypes))
print(df[‘hit’][0] + df[‘hit’][1])
运行结果如下:

          datetime       host   hit  volume

0 2018-07-24 09:00:00 weibo.com 20.0 1020.0
1 2018-07-25 09:00:00 qq.com 20.0 1028.0
2 2018-07-26 19:00:00 sina.com NaN NaN
3 2018-07-27 21:00:00 sohu.com 15.0 4582.0
datatype of column hit is: float64
40.0
可以看到,pandas将数据集中的missing单元全部转换为了NaN,并成功判断出hit这一列的数据类型。

  1. 总结
    通过一个简单的read_csv()函数,实际可以做到如下几件事:

通过指定的文件路径,从本地读取csv文件,并将数据转换成DataFrame格式
更正数据集的头部(column)
正确处理缺失数据
推断每一列的数据类型
当然,read_csv()函数还有一系列其他参数来应对各种情况,遇到具体问题的同学可参考其接口指南。

上一篇:python 制作GUI页面以及多选框


下一篇:2020 HIT Database 复习