python的pandas包,pandas如何读取格式化数据?
发布于 作者:苏南大叔 来源:程序如此灵动~
python当然可以使用传统的open语句来读取一个文件,但是在现在的科学时代,不使用点高大上的库就显得那么跟不上时代。比如:苏南大叔的读取三元组数据文本的任务。其实也可以使用pandas这个库来读取。

大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和各种编程代码的事情。本文讲述python数据处理的工具pandas的基本使用问题。本文测试环境:python@3.6.8,pandas@1.1.5。另外悄悄的说一句:pandas和我们的国宝熊猫到底是啥关系呢?
什么是pandas
Pandas是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的。Pandas纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas的主要数据结构是Series(一维数据)与DataFrame(二维数据),这两种数据结构足以处理金融、统计、社会科学、工程等领域里的大多数典型用例。
pandas的官方网站:

虽然用了很久这个库了,但是真心是没访问过它的官网。而且,不仅python里面有pandas,R语言里面也有pandas。
查看pandas版本
想要使用pandas,首先就要使用pip安装pandas,执行命令:
pip install pandas如果想要查看已经安装好的pandas版本的话,可以执行:
pip list | grep pandas相关连接:
read_table
这里用于读取特殊格式化后的文本数据,比如csv数据等等,只要文本数据符合类似table形状的数据,各行之间是换行分割,各列之间使用某个字符进行分割的就行。比如:苏南大叔要处理的知识图谱三元组数据。

本文范例中,知识图谱的三元组数据共分为三列,第一列和第三列都是实体,中间一列是关系(属性),数据之间使用/t分割。使用pandas的read_table函数的话,需要指定分隔符decimal,还需要给每列起个合适的名字names`。这里知识图谱的三元组数据有三列,所以第三个参数是个对应数量的数组。
import pandas as pd
data = pd.read_table("test2.txt", decimal="\t", names=["entity_1", "role", "entity_2"])pd数据总览
查看总体信息:
data.info()返回数据类似如下:
RangeIndex: 83207 entries, 0 to 83206
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 entity_1 83207 non-null object
1 role 83207 non-null object
2 entity_2 83207 non-null object
dtypes: object(3)
memory usage: 1.9+ MB
None显示共有三列数据,分别是:entity_1/role/entity_2,每列有83207条数据。

pd数据范例
查看范例数据:
data.head()
# data.head(20)就是展示一下前几条数据,不传数量的话,就显示5条,传递个数量的话,就显示对应条数的数据。显示出来的数据和在文本中很不一样,有点像文本放在excel里面的感觉。

pd数据类型
查看类型:
type(data) # <class 'pandas.core.frame.DataFrame'>
type(data['entity_1']) # <class 'pandas.core.series.Series'>这个类型的显示,可以印证开篇的描述,DataFrame类似二维数组,Series类似一维数组。

列名数据遍历
for index, row in data.iteritems():
print(index) # 输出列名
Series数据遍历
pandas的数据,需要先把Series转换为list,才能进行遍历。代码如下:
entity_1_list = data['entity_start'].tolist()
for item in entity_1_list :
print(item) ## 宝岛
当然,还有别的遍历方式,这里仅仅是列出其中一种罢了。别把这里的代码当成唯一标准答案。
参考文献
更多更全面的说明,还是要看官方文档。
总结
在R语言里面,也有非常非常类似的pandas可以使用。苏南大叔也会后续更新pandas系列文章。敬请期待!