python当然可以使用传统的open语句来读取一个文件,但是在现在的科学时代,不使用点高大上的库就显得那么跟不上时代。比如:苏南大叔的读取三元组数据文本的任务。其实也可以使用pandas这个库来读取。

苏南大叔:python的pandas包,pandas如何读取格式化数据? - python-pandas
python的pandas包,pandas如何读取格式化数据?(图8-1)

大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和各种编程代码的事情。本文讲述python数据处理的工具pandas的基本使用问题。本文测试环境:python@3.6.8pandas@1.1.5。另外悄悄的说一句:pandas和我们的国宝熊猫到底是啥关系呢?

什么是pandas

Pandas是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的。Pandas纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。
Pandas的主要数据结构是Series(一维数据)与DataFrame(二维数据),这两种数据结构足以处理金融、统计、社会科学、工程等领域里的大多数典型用例。

pandas的官方网站:

苏南大叔:python的pandas包,pandas如何读取格式化数据? - pandas官方网站
python的pandas包,pandas如何读取格式化数据?(图8-2)

虽然用了很久这个库了,但是真心是没访问过它的官网。而且,不仅python里面有pandasR语言里面也有pandas

查看pandas版本

想要使用pandas,首先就要使用pip安装pandas,执行命令:

pip install pandas

如果想要查看已经安装好的pandas版本的话,可以执行:

pip list | grep pandas

相关连接:

read_table

这里用于读取特殊格式化后的文本数据,比如csv数据等等,只要文本数据符合类似table形状的数据,各行之间是换行分割,各列之间使用某个字符进行分割的就行。比如:苏南大叔要处理的知识图谱三元组数据。

苏南大叔:python的pandas包,pandas如何读取格式化数据? - 范例三元组数据
python的pandas包,pandas如何读取格式化数据?(图8-3)

本文范例中,知识图谱的三元组数据共分为三列,第一列和第三列都是实体,中间一列是关系(属性),数据之间使用/t分割。使用pandasread_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条数据。

苏南大叔:python的pandas包,pandas如何读取格式化数据? - pd-info
python的pandas包,pandas如何读取格式化数据?(图8-4)

pd数据范例

查看范例数据:

data.head()
# data.head(20)

就是展示一下前几条数据,不传数量的话,就显示5条,传递个数量的话,就显示对应条数的数据。显示出来的数据和在文本中很不一样,有点像文本放在excel里面的感觉。

苏南大叔:python的pandas包,pandas如何读取格式化数据? - pd-head
python的pandas包,pandas如何读取格式化数据?(图8-5)

pd数据类型

查看类型:

type(data)              # <class 'pandas.core.frame.DataFrame'>
type(data['entity_1'])  # <class 'pandas.core.series.Series'>

这个类型的显示,可以印证开篇的描述,DataFrame类似二维数组,Series类似一维数组。

苏南大叔:python的pandas包,pandas如何读取格式化数据? - pd-type
python的pandas包,pandas如何读取格式化数据?(图8-6)

列名数据遍历

for index, row in data.iteritems():
    print(index) # 输出列名

苏南大叔:python的pandas包,pandas如何读取格式化数据? - pd-dataframe
python的pandas包,pandas如何读取格式化数据?(图8-7)

Series数据遍历

pandas的数据,需要先把Series转换为list,才能进行遍历。代码如下:

entity_1_list = data['entity_start'].tolist()
for item in entity_1_list :
    print(item) ## 宝岛

苏南大叔:python的pandas包,pandas如何读取格式化数据? - pd-series
python的pandas包,pandas如何读取格式化数据?(图8-8)

当然,还有别的遍历方式,这里仅仅是列出其中一种罢了。别把这里的代码当成唯一标准答案。

参考文献

更多更全面的说明,还是要看官方文档。

总结

R语言里面,也有非常非常类似的pandas可以使用。苏南大叔也会后续更新pandas系列文章。敬请期待!

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。