Python数据描述与分析

128 篇文章 21 订阅

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

Pandas数据结构

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

1)Series简介

Series是一种类似于一维数组的对象,它由两部分组成,第一部分是一维数据,另外一部分是与此一维数据对应的标签数据。但是语言描述不好理解,具体如下:

import pandas as pd
#这是约定俗成的写法,一般而言,大家都会写pd,当然也可以换成别的

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

因为我们没有指定标签数据,而Python默认是通过数字排序进行标识,接下来给它添加标识数据。

import pandas as pd
#这是约定俗成的写法,一般而言,大家都会写pd,当然也可以换成别的

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

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

import pandas as pd
#这是约定俗成的写法,一般而言,大家都会写pd,当然也可以换成别的

centerSeries=pd.Series(['中国科学院','文献情报中心','大楼','北四环西路'],index=['a','b','c','d']);
# index的size同Series必须一样大,否则报错
print(centerSeries[0])#通过一维数组进行获取数据
print(centerSeries[1])
print(centerSeries['c'])#通过标识index获取数据
print(centerSeries['d'])
# output:
# 中国科学院
# 文献情报中心
# 大楼
# 北四环西路

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

2)DataFrame简介

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

import pandas as pd
# 简单的DataFrame制作
# 字典格式的数据
data={'name':['国科图','国科图','文献情报中心','文献情报中心'],
     'year':['2012','2013','2014','2015'],
     'local':['北四环西路','北四环西路','北四环西路','北四环西路'],
     'student':['甲','乙','丙','丁']}
centerDF=pd.DataFrame(data);
centerDF #同样,默认的index是数字表示,而且它的列名也是按字母顺序排序的

运行结果:

image

当然我们可以调整列的格式,index仍采用默认:

在pd.DataFrame()函数中明确指定参数columns

centerDF=pd.DataFrame(data,columns=['year','name','local','student']);

结果:

image

更改index的默认设置:

在pd.DataFrame()函数中明确指定参数index

centerDF=pd.DataFrame(data,columns=['year','name','local','student'],index=['a','b','c','d']);

image

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

import pandas as pd
# 简单的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()
print('列的类型:',type(centerDF['name']))
print();
print(centerDF['year'])
# output:
# a       国科图
# b       国科图
# c    文献情报中心
# d    文献情报中心
# Name: name, dtype: object

# 列的类型: <class 'pandas.core.series.Series'>

# a    2012
# b    2013
# c    2014
# d    2015
# Name: year, dtype: object

另外,可以看出按列进行获取时它们的index表示是相同的,且每一列是一个Series对象。

按行进行数据获取,其实是通过index进行操作。

import pandas as pd
# 简单的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.loc['a']);
print()
print('行的类型:',type(centerDF.loc['a']))
# output:
#year        2012
# name         国科图
# local      北四环西路
# student        甲
# Name: a, dtype: object

# 行的类型: <class 'pandas.core.series.Series'>

其中‘loc’,也可用‘iloc’,不推荐使用‘ix’,因为其已经被弃用。

可以看出,每一行是一个Series对象,此时该Series的index其实就是DataFrame的列名称,综上来看,对于一个DataFrame来说,它是纵横双向进行索引,只是每个Series(纵横)都共用一个索引而已。

3)利用Pandas加载、保存数据

在进行数据处理时我们首要的工作是把数据加载到内存中,这一度成为程序编辑的软肋,但是Pandas包所提供的功能几乎涵盖了大多数的数据处理的加载问题,如read_csv、read_ExcelFile等。

1.加载、保存csv格式的数据

原文件:

image

代码:

#! /usr/bin/env python  
#coding=utf-8  

#加载csv格式的数据
data_csv=pd.read_csv(r'C:\Users\123\Desktop\result.csv');#它的默认属性有sep=','
data_csv

运行结果:

image

更改默认属性

data_csv=pd.read_csv(r'C:\Users\123\Desktop\result.csv',sep='#');#更改默认属性有sep='#'
data_csv

运行结果:

image

不要表头:

data_csv=pd.read_csv(r'C:\Users\123\Desktop\result.csv',header=None,skiprows=[0]);#不要表头Header
data_csv

结果:

image

自行添加表头列:

#! /usr/bin/env python  
#coding=utf-8  

#加载csv格式的数据
data_csv=pd.read_csv(r'C:\Users\123\Desktop\result.csv',header=None,skiprows=[0]);#不要表头Header
print(type(data_csv))#通过它的类型我们可以看到它是DataFrame
#可自行添加表头列
data_csv.columns=['第一列','第二列','第三列','第四列','第五列','第六列','第七列','第八列','第十列','第十一列','第十二列','第十三列'];
data_csv

运行结果:

image

保存csv数据:

#! /usr/bin/env python  
#coding=utf-8  

#加载csv格式的数据
data_csv=pd.read_csv(r'C:\Users\123\Desktop\result.csv',header=None,skiprows=[0]);#不要表头Header
print(type(data_csv))#通过它的类型我们可以看到它是DataFrame
#可自行添加表头列
data_csv.columns=['第一列','第二列','第三列','第四列','第五列','第六列','第七列','第八列','第十列','第十一列','第十二列','第十三列'];
data_csv.loc[0,'第一列']='新添加内容';
data_csv.to_csv(r'C:\Users\123\Desktop\result2.csv');
data_csv

运行结果:

image

生成新文件:

image

综上所述,通过对csv格式的文件进行读取,我们可以指定读入的格式(sep=’,’),也可以指定它的header为空None,最后添加column,而之所以可以后来添加的原因是读入的csv已经是DataFrame对象了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值