【Pandas】pandas的主要数据结构

时间:2022-07-23
本文章向大家介绍【Pandas】pandas的主要数据结构,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1. pandas入门篇

pandas是数据分析领域的常用库,它被专门设计来处理表格和混杂数据,这样的设计让它在数据清洗和分析工作上更有优势。

1. pandas数据结构

pandas的数据结构主要为:

Series和DataFrame

1.1 Series

Series类似一维数组,它由一组数据和一组与之相关的数据标签组成。Series的表现形式为索引在左值在右。没有制定索引时,自动创建一个0到N-1(N:数据长度)的整数型索引。

创建方法

#pd.Series创建一个Seies
obj = pd.Series([4,7,-5,3])

Out:
0    4
1    7
2   -5
3    3
dtype: int64

使用字典创建Series

#创建的Series的索引就是字典的键。
In[1]:
data = {'a':4,'b':7,'c':-5,'d':4}
sdata = pd.Series(data)

#改变键的位置来传入可以改变Series的顺序。
#当输入的索引找不到对应值时,结果为NaH。
In[2]:
data = {'a':4,'b':7,'c':-5,'d':4}
index_d = ['d','c','a','e']
sdata = pd.Series(sdata,index=index_d)

Out[1]:
a    4
b    7
c   -5
d    4
dtype: int64
    
Out[2]:
d    4.0
c   -5.0
a    4.0
e    NaN
dtype: float64

自定义索引

obj = pd.Series([4,7,-5,4],index = ['a','b','c','d'])

Out:
a    4
b    7
c   -5
d    4
dtype: int64

通过操作index属性,同样可以获取索引

obj.index

Out:
    Index(['a', 'b', 'c', 'd'], dtype='object')

对Series进行运算

使用NumPy函数或类似NumPy的运算都会保留索引。

In[1]:obj[obj>0]	#布尔过滤
Out[1]:
a    4
b    7
d    4
dtype: int64

In[2]:obj*2
Out[2]:
a     8
b    14
c   -10
d     8
dtype: int64

In[3]:np.exp(obj)
Out[3]:
a      54.598150
b    1096.633158
c       0.006738
d      54.598150
dtype: float64

检测缺失数据

pandas的isnull和notnull可用于检测缺失数据。

In[1]:
data = {'a':4,'b':7,'c':-5,'d':4}
index_d = ['d','c','a','e']
sdata = pd.Series(sdata,index=index_d)

pd.isnull(sdata)

In[2]:
data = {'a':4,'b':7,'c':-5,'d':4}
index_d = ['d','c','a','e']
sdata = pd.Series(sdata,index=index_d)

pd.notnull(sdata)

Out[1]:
d    False
c    False
a    False
e     True
dtype: bool

Out[2]:
d     True
c     True
a     True
e    False
dtype: bool

Series的自动对齐属性

将两个Series相加,Series会根据运算的索引标签自动对齐数据。

In[1]:
data = {'a':4,'b':7,'c':-5,'d':4}
index_d = ['d','c','a','e']
sdata = pd.Series(sdata,index=index_d)
print(sdata)
sdata2 = pd.Series(data)
print(sdata2)

Out[1]:
stdata:
	d    4.0
	c   -5.0
	a    4.0
	e    NaN
	dtype: float64
	
sdata2:
	a    4
	b    7
	c   -5
	d    4
	dtype: int64
	
In[2]:
sdata+sdata2

Out[2]:

a     8.0
b     NaN
c   -10.0
d     8.0
e     NaN
dtype: float64

Series的name属性

In[1]:
data = {'a':4,'b':7,'c':-5,'d':4}
index_d = ['d','c','a','e']
sdata = pd.Series(sdata,index=index_d)

sdata.name = 'pandas'
sdata.index.name = 'index'

Out[1]:

index
d    4.0
c   -5.0
a    4.0
e    NaN
Name: pandas, dtype: float64

1.2 DataFrame

DataFrome是一个表格型的数据结构。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。DataFrame中的数据是以一个或多 个二维块存放的(而不是列表、字典或别的一维数据结构)。

创建DataFrame

字典创建

最常用的方法时直接传入一个由等长列表或NumPy数组组成的字典。

In[1]:
data={
'state':['Ohio','Ohio','Ohio','Nevada','Nevada','Nevada'],	
'year':	[2000,	2001,	2002,	2001,	2002,	2003],
'pop':	[1.5,	1.7,	3.6,	2.4,	2.9,	3.2]
}
Frame = pd.DataFrame(data)

Out[1]:
   pop   state  year
0  1.5    Ohio  2000
1  1.7    Ohio  2001
2  3.6    Ohio  2002
3  2.4  Nevada  2001
4  2.9  Nevada  2002
5  3.2  Nevada  2003

由结果可以看出,DataFrame自动加上了一个有序排列作为索引。

对于数据量庞大的DataFrame,head方法会选取前五行。

In[1]:
frame.head()
Out[1]:
   pop   state  year
0  1.5    Ohio  2000
1  1.7    Ohio  2001
2  3.6    Ohio  2002
3  2.4  Nevada  2001
4  2.9  Nevada  2002

与Series相似,改变字典键的顺序,同样会改变列的顺序。

In[1]:
Frame = pd.DataFrame(data,columns=['year','state','pop'])

Out[1]:
   year   state  pop
0  2000    Ohio  1.5
1  2001    Ohio  1.7
2  2002    Ohio  3.6
3  2001  Nevada  2.4
4  2002  Nevada  2.9
5  2003  Nevada  3.2

与Series相似,传入的值找不到时,也会被标记为Nah。

字典嵌套创建

嵌套字典传给DataFrame时,外层字典的键作为列,内层键作为行索引

In[1]:
pop	=	
{'Nevada':{2001:2.4,2002:2.9},
....:'Ohio':	{2000:1.5,2001:	1.7,2002:3.6}}

Out[1]:
      Nevada  ohio
2000     NaN   1.5
2001     2.4   1.7
2002     2.9   3.6

操作DataFrame

通过类似字典的方式,可以将DataFrame的列获取为一个Series。返回的Series有着与DtaFrame相同的索引且其name属性为列索引。

In[1]:
Frame['state']

Out[1]:
0      Ohio
1      Ohio
2      Ohio
3    Nevada
4    Nevada
5    Nevada
Name: state, dtype: object

列可以通过赋值的方法进行修改。注意:将列表或数组赋值给某个列时,其长度必须跟DataFrame的长度匹配;将Series赋值给一个列时,会精确匹配DataFrame的索引,空位将被用NaH替代。

In[1]:
#也可以用类似的方法进行添加列
Frame['pop'] = np.arange(6)

Out[1]:
   year   state  pop
0  2000    Ohio    0
1  2001    Ohio    1
2  2002    Ohio    2
3  2001  Nevada    3
4  2002  Nevada    4
5  2003  Nevada    5

关键字del可以被用来删除列。

In[1]:
del Frame['pop']

Out[1]:
   year   state
0  2000    Ohio
1  2001    Ohio
2  2002    Ohio
3  2001  Nevada
4  2002  Nevada
5  2003  Nevada

DataFrame构造器能接收的数据