ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

python-数据描述与分析(1)

2022-12-03 17:45:52  阅读:454  来源: 互联网

标签:python 数据 Pandas 数据结构 Series 制作 对象


数据描述与分析

   在进行数据分析之前,我们需要做的事情是对数据有初步的了解,这个了解就涉及对行业的了解和对数据本身的敏感程度,通俗来说就是对数据的分布有大概的理解,此时我们需要工具进行数据的描述,观测数据的形状等;而后才是对数据进行建模分析,挖掘数据中隐藏的位置信息。目前在数据描述和简单分析方面做的比较好的是Pandas库。当然,它还需要结合我们之前提到的Numpy,Scipy等科学计算相关库才能发挥功效。

1.Pandas 数据结构
在进行Pandas相关介绍时我们首先需要知道的是Pandas 的两个数据结构(即对象)Series 和 DataFrame,这是Pandas的核心结构,掌握了此二者结构和属性要素,会在具体的数据处理过程中如虎添翼。

1.1 Series 简介
Series 是一种类似于以为数据的对象,它由两部分组成,第一部分是一维数据,另外一部分是与此一维数据对应的标签数据。具体如下:

import pandas as pd
centerSeries =pd.Series(["中国科学院","文献情报中心","大楼","北四环西路",])
print (centerSeries)
 
#output:
0     中国科学院
1    文献情报中心
2        大楼
3     北四环西路
dtype: object

因为我们没有指定它的标签数据,而python默认是通过数字排序进行标识,接下来给他添加标示数据,具体如下:

centerSeries =pd.Series(["中国科学院","文献情报中心","大楼","北四环西路",],index=["a","b","c","d"])
print (centerSeries) #index的size和Series的size必须一样长,否则报错
 
#output:
a     中国科学院
b    文献情报中心
c        大楼
d     北四环西路
dtype: object

对比之前的默认标识,我们可以看出它由1,2,3,4变成了a,b,c,d。接下来将解释这样标识的意义,具体如下:

import pandas as pd
centerSeries =pd.Series(["中国科学院","文献情报中心","大楼","北四环西路",],index=["a","b","c","d"])
print (centerSeries[0])  #通过一维数组进行获取数据
print (centerSeries[1])
print (centerSeries["c"])  #通过标识index获取数据
print (centerSeries["d"])
#output:
中国科学院
文献情报中心
大楼
北四环西路

另外,我们可以看到通过一维数组格式获取数据和通过index标识获取数据都可以,这样的index就像曾经学过的数据库中的id列的作用,相当于建立了每个数据的索引。当然,针对Series的操作不只限于此,还有很多需要我们自己去通过“help”查看得到的。

1.2 DataFrame 简介
DataFrame 是一个表格型的数据结构,它包含有列和行的索引,当然你也可以把它看作是由Series组织成的字典。需要说明的是,DataFrame的每一列中不需要数据类型相同,且它的数据是通过一个或者多个二维块进行存放,在了解DataFrame之前如果读者对层次化索引有所了解,那么DataFrame 可能相对容易理解,当然如果读者并不知道何谓层次化索引也没关系,举个例子:他类似于常见的excel的表格格式,可将它理解为一张excel表,具体如下:

#简单的DataFrame 制作
#字典格式的数据
data = {"name":["国科图","国科图","文献情报中心","文献情报中心"],
        "year":["2012","2013","2014","2015"],
       "local":["北四环西路","北四环西路","北四环西路","北四环西路"],
       "student":["甲","乙","丙","丁"]}
centerDF = pd.DataFrame(data)
print(centerDF)
#output:
 name  year  local student
0     国科图  2012  北四环西路       甲
1     国科图  2013  北四环西路       乙
2  文献情报中心  2014  北四环西路       丙
3  文献情报中心  2015  北四环西路       丁
#调整列的顺序
data = {"local":["北四环西路","北四环西路","北四环西路","北四环西路"],
"name":["国科图","国科图","文献情报中心","文献情报中心"],
"year":["2012","2013","2014","2015"],
"student":["甲","乙","丙","丁"]}
centerDF = pd.DataFrame(data,columns=["year","name","local","student"])
print(centerDF)
#output:   
year    name  local student
0  2012     国科图  北四环西路       甲
1  2013     国科图  北四环西路       乙
2  2014  文献情报中心  北四环西路       丙
3  2015  文献情报中心  北四环西路       丁
#更改index的默设置
data = {"name":["国科图","国科图","文献情报中心","文献情报中心"],
        "year":["2012","2013","2014","2015"],
       "local":["北四环西路","北四环西路","北四环西路","北四环西路"],
       "student":["甲","乙","丙","丁"]}
centerDF = pd.DataFrame(data,columns=["year","name","local","student"],index=["a","b","c","d"])
print(centerDF)
#output:   
year    name  local student
a  2012     国科图  北四环西路       甲
b  2013     国科图  北四环西路       乙
c  2014  文献情报中心  北四环西路       丙
d  2015  文献情报中心  北四环西路       丁

既然DataFrame 是行列格式的数据,那么理所当然可以通过行、列的方式进行数据获取,按列进行数据据获取,具体如下:

data = {"name":["国科图","国科图","文献情报中心","文献情报中心"],
        "year":["2012","2013","2014","2015"],
       "local":["北四环西路","北四环西路","北四环西路","北四环西路"],
       "student":["甲","乙","丙","丁"]}
centerDF = pd.DataFrame(data,columns=["year","name","local","student"],index=["a","b","c","d"])
print (centerDF["name"])
print (centerDF["student"])
#output:
a       国科图
b       国科图
c    文献情报中心
d    文献情报中心
Name: name, dtype: object
a    甲
b    乙
c    丙
d    丁
Name: student, dtype: object

另外,可以看出按列进行获取时他们的index标识是相同的,且每一列是一个Series 对象

按行进行数据获取,其实是通过index进行操作,具体如下:

data = {"name":["国科图","国科图","文献情报中心","文献情报中心"],
        "year":["2012","2013","2014","2015"],
       "local":["北四环西路","北四环西路","北四环西路","北四环西路"],
       "student":["甲","乙","丙","丁"]}
centerDF = pd.DataFrame(data,columns=["year","name","local","student"],index=["a","b","c","d"])
print (centerDF.loc["a"])

标签:python,数据,Pandas,数据结构,Series,制作,对象
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有