结构化数据,我该拿你怎么办?

简介: 结构化数据,我该拿你怎么办?

首先介绍一下什么是结构化数据:


结构化数据,简单来说就是数据库。结合到典型场景中更容易理解,比如企业ERP、财务系统;医疗HIS数据库;教育一卡通;政府行政审批;其他核心数据库等。基本包括高速存储应用需求、数据备份需求、数据共享需求以及数据容灾需求。


结构化数据也称作行数据,是由二维表结构来逻辑表达和实现的数据,严格地遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理。与结构化数据相对的是不适于由数据库二维表来表现的非结构化数据,包括所有格式的办公文档、XML、HTML、各类报表、图片和咅频、视频信息等。支持非结构化数据的数据库采用多值字段、了字段和变长字段机制进行数据项的创建和管理,广泛应用于全文检索和各种多媒体信息处理领域。


在Python中使用什么去处理结构化数据:


Pandas是python的一个数据分析包,最初由AQR Capital Management于2008年4月开发,并于2009年底开源出来,目前由专注于Python数据包开发的PyData开发team继续开发和维护,属于PyData项目的一部分。Pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持。 Pandas的名称来自于面板数据(panel data)和python数据分析(data analysis)。panel data是经济学中关于多维数据集的一个术语,在Pandas中也提供了panel的数据类型。


pandas中有个叫DataFrame的东西,它便是专门用来处理结构化数据的。


那首先我们就先来创建一个dataframe:

在创建dataframe之前我们得需要引入两个模块,一个就是我们刚刚所说的pandas,还有一个就是numpy:

640.png


下面我们可以来定义一个dataframe对象了:

新建dataframe对象最常用的一个方法就是直接传递一个字典对象给DataFrame()构造函数,具体例子如下:

640.png

输出:

640.png


以上是创建了一个学生的信息,当然,如果你只想show某个指定的列可以直接指定(使用column直接指定即可,新建的dataframe每个column的顺序和你指定的顺序是一致的,和他们在字典中的顺序无关):

640.png

输出:


640.png

以上便是定义一个dataframe,除此之外还有个更简单的方法直接定义一个dataframe,这次我们不在需要借用字典了,我们直接定义一个构造函数,然后给予它三个参数,这三个参数分别是:数据矩阵,index的选项(就是上图输出中自动生成的01234),column的选项。例子如下:

640.png

输出:

640.png



如何从DataFrame中选取元素?


就拿刚刚的例子而言,如果我们想知道DataFrame所以列的名称,我们直接调用columns属性即可。

640.png

输出:

640.png

同理,想要看到所有的索引列表我们也直接可以调用index属性:

students.index

如果我们想要获取存储在数据结构中的所有元素,我们可以使用values属性来获取所有元素(数据类型是:<class 'numpy.ndarray'>):

students.values

输出:

640.png


对于想获取某个单独的列,我们可以直接将列名拿过来,类似于字典中的以键取值:(两种方法都可以,效果一样)

640.png

输出:

640.png


如果我们想读取某一行的记录我们可以使用ix属性来获取,例如我们现在来获取第二行(name索引为2的行)的记录:

640.png

输出:


640.png

那这边有一点要讲一下,ix属性也有个获取多行记录的方法,和列表的切片方法差不多,例如我想获取第二行,第三行,第四行的信息(索引值为123):

students.ix[1:3]    #[1:3]就代表从1到3,类似于list的切片

输出:


640.png

那如果只需要第二行和第四行(索引为1,3)怎么办??

很简单,我们只需要在ix属性里放一个列表即可:

students.ix[[1,3]] #逗号表示隔开

输出:

640.png


那如果我们只想取某个确定的值呢?

例如我们想把Tom这个名字给取出来,我们该怎么办?

students.ix[1]['name']

或者

students['name'][1]

以上两种方法都可以输出Tom。

那按照以上方法我们可以把值给取出来,也可以修改值(直接students['name'][1]=‘Alice’就可以完成更新)。


那我们现在想要添加一列新的元素,班长,他们的班长都是Tom同学,那此时我们该怎么办?


没错,模仿list,我们可以直接插入一个新的column:

640.png

输出:

640.png


那如果想删除某个列呢?

同样的模仿list的方法:

del students['monitor']

输出:


640.png

最后还要一个小的知识点,如果我们想把这个Dataframe的index和column进行互换,那我们以该怎么办?


学过线性代数的同学肯定立刻就知道了,我们可以直接使用它的转秩:

student.T

输出:

640.png


如果想把DataFrame转化成其他数据类型,我们可以使用:

students.to_dict() #默认outtype='dict'

输出:

{'ID': {0: 'SH0012', 1: 'GZ0034', 2: 'ZJ0021', 3: 'DL0042', 4: 'HK0017'}, 'age': {0: 23, 1: 24, 2: 23, 3: 25, 4: 23}, 'name': {0: 'John', 1: 'Tom', 2: 'Tony', 3: 'Stack', 4: 'Sherlock'}}


那现在留一个思考题,如何借助字典创建一个自定义index的DataFrame?(现在来说应该特别简单了)


下面还有一些DataFrame常用的方法:


排序

DataFrame提供了多种排序方式。

students.sort_index(axis=1, ascending=False)

sort_index可以以轴的标签进行排序。axis是指用于排序的轴,可选的值有0和1,默认为0即行标签(Y轴),1为按照列标签排序。 ascending是排序方式,默认为True即降序排列。

students.sort(columns='two')

students.sort(columns=['ID','age'],ascending=[0,1])

DataFrame也提供按照指定列进行排序,可以仅指定一个列作为排序标准(以单独列名作为columns的参数),也可以进行多重排序(columns的参数为一个列名的List,列名的出现顺序决定排序中的优先级),在多重排序中ascending参数也为一个List,分别与columns中的List元素对应。



读写数据

DataFrame可以方便的读写数据文件,最常见的文件为CSV或Excel。Pandas读写Excel文件需要openpyxl(Excel 2007),

xlrd/xlwt(Excel 2003)。

从CSV中读取数据:

df = pd.read_csv('foo.csv')

R中的对应函数:

df = read.csv('foo.csv')

将DataFrame写入CSV:

df.to_csv('foo.csv')

R中的对应函数:

df.to.csv('foo.csv')

从Excel中读取数据:

xls = ExcelFile('foo.xlsx')
xls.parse('sheet1', index_col=None, na_values=['NA'])

先定义一个Excel文件,用xls.parse解析sheet1的内容,index_col用于指定index列,na_values定义缺失值的标识。

将DataFrame写入Excel文件:

df.to_excel('foo.xlsx', sheet_name='sheet1')

默认的sheet为sheet1,也可以指定其他sheet名。


基本运算

Pandas支持基本的运算及向量化运算。

df.mean()#计算列的平均值,参数为轴,可选值为0或1.
默认为0,即按照列运算.

df.sum(1)#计算行的和

df.apply(lambda x: x.max() - x.min())#将一个函数应用到DataFrame的每一列,这里使用的是匿名lambda函数,与R中apply函数类似.



构建透视表

使用pivot_table和crosstab都可以创建数据透视表

df = pd.DataFrame({'A' : ['one', 'one', 'two', 'three'] * 3,
                   'B' : ['A', 'B', 'C'] * 4, 
                   'C' : ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 2, 
                   'D' : np.random.randn(12), 'E' : np.random.randn(12)})
pd.pivot_table(df, values = 'D', rows = ['A', 'B'], cols = ['C'])#以A、B为行标签,以C为列标签将D列的值汇总求和
pd.crosstab(rows = ['A', 'B'], cols = ['C'], values = 'D')#以A、B为行标签,以C为列标签将D列的值汇总求和



时间序列分析

时间序列也是Pandas的一个特色。时间序列在Pandas中就是以Timestamp为索引的Series。

pandas提供to_datetime方法将代表时间的字符转化为Timestamp对象:

s = '2018-08-08 21:00:00'
ts = pd.to_datetime(s)

有时我们需要处理时区问题:

ts=pd.to_datetime(s,utc=True).tz_convert('Asia/Shanghai')

构建一个时间序列:

rng = pd.date_range('1/1/2018', periods=5, freq='M')
ts = pd.Series(randn(len(rng)), index=rng)

Pandas提供resample方法对时间序列的时间粒度进行调整:

ts_h=ts.resample('H', how='count')#M,5Min,1s

以上是将时间序列调整为小时,还可以支持月(M),分钟(Min)甚至秒(s)等。




今天就分享到这里吧!

相关文章
|
Java 项目管理 数据库
基于springboot私人健身与教练预约管理系统
基于springboot私人健身与教练预约管理系统
|
2月前
|
人工智能 监控 安全
管理和调度Dify工作流
Dify是一款开源的大模型应用开发平台,支持通过可视化界面快速构建AI Agent和工作流。然而,Dify本身缺乏定时调度与监控报警功能,且执行记录过多可能影响性能。为解决这些问题,可采用Dify Schedule或XXL-JOB集成Dify工作流。Dify Schedule基于GitHub Actions实现定时调度,但仅支持公网部署、调度延时较大且配置复杂。相比之下,XXL-JOB提供秒级调度、内网安全防护、限流控制及企业级报警等优势,更适合大规模、高精度的调度需求。两者对比显示,XXL-JOB在功能性和易用性上更具竞争力。
830 64
管理和调度Dify工作流
|
5月前
|
人工智能 算法 大数据
数据的“潘多拉魔盒”:大数据伦理的深度思考
数据的“潘多拉魔盒”:大数据伦理的深度思考
330 25
|
6月前
|
SQL 数据可视化 大数据
从数据小白到大数据达人:一步步成为数据分析专家
从数据小白到大数据达人:一步步成为数据分析专家
377 92
|
9月前
|
文字识别 算法 计算机视觉
PaddleOCR学习笔记 01-PaddleOCR简介
《PaddleOCR学习笔记 01-PaddleOCR简介》涵盖了PaddleOCR的基础介绍、OCR技术概览、PaddleOCR的开源状态及主要算法,包括文字检测与识别算法、百度自研的SAST、SRN和End2End-PSL等,以及9m超轻量模型的介绍。适合初学者入门学习。
388 0
PaddleOCR学习笔记 01-PaddleOCR简介
|
9月前
|
数据采集 前端开发 算法
Python Requests 的高级使用技巧:应对复杂 HTTP 请求场景
本文介绍了如何使用 Python 的 `requests` 库应对复杂的 HTTP 请求场景,包括 Spider Trap(蜘蛛陷阱)、SESSION 访问限制和请求频率限制。通过代理、CSS 类链接数控制、多账号切换和限流算法等技术手段,提高爬虫的稳定性和效率,增强在反爬虫环境中的生存能力。文中提供了详细的代码示例,帮助读者掌握这些高级用法。
563 1
Python Requests 的高级使用技巧:应对复杂 HTTP 请求场景
|
11月前
|
SQL 数据库 开发者
SQL中的子查询:嵌套查询的深度解析
【8月更文挑战第31天】
1405 0
|
分布式计算 资源调度 Hadoop
Hadoop配置文件yarn-env.sh
【7月更文挑战第18天】
454 2
|
机器学习/深度学习 搜索推荐 vr&ar
探索未来智能手机操作系统的发展趋势
随着科技的不断进步,智能手机操作系统正在经历着前所未有的变革和发展。本文将从技术创新、用户体验和生态系统三个方面探讨未来智能手机操作系统的发展趋势,展望智能手机操作系统的未来发展方向。
|
数据采集 存储 机器学习/深度学习
大数据数据采集的数据类型的非结构化数据
在大数据领域中,数据采集是一个至关重要的环节。除了结构化数据外,非结构化数据也是大数据采集的重要组成部分之一。本文将介绍大数据数据采集中的非结构化数据类型,以及如何对这些数据进行有效的采集和处理。
1180 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问