python之数据分析Pandas-3
一:pandas简介
1,pandas 是基于NumPy 的一种工具,为解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。
2,Pandas 是python的一个数据分析包,Pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持。
3,Pandas的名称来自于面板数据(panel data)和python数据分析(data analysis)。panel data是经济学中关于多维数据集的一个术语,在Pandas中也提供了panel的数据类型。
二:数据结构
**Series:**一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近,其区别是:List中的元素可以是不同的数据类型,而Array和Series中则只允许存储相同的数据类型,这样可以更有效的使用内存,提高运算效率。
DataFrame:二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器。
**Panel :**三维的数组,可以理解为DataFrame的容器。
pandas为python的库,所以python的所有数据类型在pandas都能使用,另外包括pandas定义2种数据类型:Series:、DataFrame
三:pandas与numpy关系
数据结构:
*numpy:*核心数据结构是ndarray,支持任意维数的数组,但要求单个数组内所有数据是同质的,即类型必须相同
*pandas:*核心数据结构是series和dataframe,仅支持一维和二维数据,但数据内部可以是异构数据,仅要求同列数据类型
功能定位:
umpy虽然也支持字符串等其他数据类型,但仍然主要是用于数值计算,尤其是内部集成了大量矩阵计算模块
pandas主要用于数据处理与分析,支持包括数据读写、数值计算、数据处理、数据分析和数据可视化全套流程操作
四:series
series:
带标签的一维数组,所以还可以看做是类字典结构:标签是key,取值是value;
ataframe则可以看做是嵌套字典结构,其中列名是key,每一列的series是value
注意:这里强调series和dataframe是一个类字典结构而非真正意义上的字典,原因在于series中允许标签名重复、dataframe中则允许列名和标签名均有重复,而这是一个真正字典所不允许的。
1> 功能 Series简介
下面我们直接用演示讲series功能
1. 新建series
import pandas as pd
list_a = ['a','b','c','d','e']
data_s = pd.Series(list_a)
print(data_s)
................................................
0 a
1 b
2 c
3 d
4 e
................
自动添加索引0-4
import pandas as pd
list_a = ['a','b','c','d','e']
data_s = pd.Series(list_a)
index_a = ['1','2','3','4','5']
headers = '字母'
data_s = pd.Series(list_a)
data_s2 = pd.Series(list_a,index=index_a)
print(data_s2)
................................
1 a
2 b
3 c
4 d
5 e
..............................
index =[]自定义索引
data_s3 = pd.Series(list_a,index=index_a,name=headers)
print(data_s3)
data_s3.to_csv(r'I:\appuim\LOG_cat\1.csv')
...................................................
1 a
2 b
3 c
4 d
5 e
Name: 字母, dtype: object
...................................
csv保存内容为:
name命名为列名
效果等同
dict_a = {
1:'a',2:'b',3:'c'}
data_s = pd.Series(dict_a,name = '字母')
print(data_s)
data_s.to_csv(r'I:\appuim\LOG_cat\1.csv')
.................................
通过series中字典创建
1,由此可见字典的key为行的索引,value 为cell值,而列名是需要重新命名
index_a = ['1','2','3','4','5']
headers = '字母'
dict_a = {
'a':1,'b':2,'c':3,'d':4,'e':5}
list_a = ['a','b','c','d','e']
data_s = pd.DataFrame(dict_a,index=index_a)
print(data_s)
.............................................
a b c d e
1 1 2 3 4 5
2 1 2 3 4 5
3 1 2 3 4 5
4 1 2 3 4 5
5 1 2 3 4 5
..............................
可直接常见字典后dataframe保存数据
在Dataframe中key值为列名,value为cell值,
2. numpy创建
python
import pandas as pd
import numpy as np
s = pd.Series(np.random.randint(1,5,size=(4,)),index=['a','b','c','d'])
print(s)
...........................................
a 1
b 4
c 4
d 1
.......................................................
np.andom.randint 随机区间上线、下线,长度
他是前闭后开区间,区别于random的前闭后闭区间
2> Series的索引和切片
引分为隐式索引和显示索引,因此不同的方式操作起来也不一样。
显示通过设定索引获取参数,即区分于隐式索引
1. 隐式索引的操作
import pandas as pd
import numpy as np
lst1 = [1,3,5,6,10,23]
s = pd.Series(lst1,name ='number')
s.to_csv(r'I:\appuim\LOG_cat\1.csv')
print(s[0:4])
print(s[[0,4]])
print(s.iloc[0:4])
print(s.iloc[[0,4]])
..................................................
0 1
1 3
2 5
3 6
Name: number, dtype: int64
0 1
4 10
Name: number, dtype: int64
...................................................
因为本身与列表类似,s.iloc 与s[] 效果相同
2. Series显式索引的操作
import pandas as pd
import numpy as np
lst1 = ['A','B','C','D']
lit2 =['a','b','c','d']
s = pd.Series(lst1,index =lit2,name= '英文')
s.to_csv(r'I:\appuim\LOG_cat\1.csv')
print(s['a':'c'])
print(s[['a','d']])
print(s.loc['a':'c'])
print(s.loc[['a','d']])
...........................................................
a A
b B
c C
Name: 英文, dtype: object
a A
d D
Name: 英文, dtype: object
.............................................................
显示索引s.loc 等同于s[]
以上分别式单行,多行,切片索引
总结
Series的索引和切片只针对行而言
loc是对于显式索引的相关操作(对于标签的处理),iloc是针对隐式索引的相关操作(对于整数的处理)。
我们发现其实s[0:2] 与 s.iloc[0:2]没有太大差别(显式索引也是一样),这并不说明iloc就没有用,个人觉得它更有意义的是在DataFrame当中使用,后面会讲到。
3> Series的基本操作
1. 显示Series部分数据内容
lst1 = ['A','B','C','D']
lit2 =['a','b','c','d']
s = pd.Series(lst1,index =lit2,name= '英文')
print(s.head(1))
print(s.tail(2))
.........................................................
a A
Name: 英文, dtype: object
c C
d D
Name: 英文, dtype: object
.........................................................
s.head(n) 该函数代表的意思是显示前多少行,可以指定显示的行数,不写n默认是前5行
s.tail(n) 该函数代表的意思是显示后多少行,可以指定显示的行数,不写n默认是前5行
2. Series去重操作
lst1 = ['A','B','C','D','C']
lit2 =['a','b','c','d','e']
s = pd.Series(lst1,index =lit2,name= '英文')
s.unique()
print(s)
s2 =s.unique()
print(s2)
.................................