pandas简介:pandas包含的数据结构和数据处理工具的设计使得利用进行数据清洗和数据分析非常快捷;与numpy的区别,pandas用来处理表格型或异质型数据的,而numpy更适合处理同质型的数值类数据。

1、Series简介

  1、Series是一种一维的数组型对象,包含以一个值序列,并且包含数组标签(称为索引),

pd.Series([4,7,-5,9])    # 不指定标签时,默认索引值和numpy数组相似
>>>Out[108]: 
0    4
1    7
2   -5
3    9
dtype: int64

pd.Series([4,7,-5,9],index=['b','a','c','d'])  # 指定标签,标签可以是字符串
>>>Out[109]: 
b    4
a    7
c   -5
d    9
dtype: int64

  2、Series与numpy函数相类似的操作风格:布尔值过滤数据、与标量相乘、应用数学函数等,这些操作将保持索引值链接。

obj = pd.Series([4,7,-5,9],index=['b','a','c','d'])
obj
>>>Out[111]: 
b    4
a    7
c   -5
d    9
dtype: int64
obj2[obj2
> 0]  # 布尔值过滤 obj2 * 2      # 标量操作 np.exp(obj2)    # 数学函数操作 'b' in obj2    # 逻辑判断 'e' in obj2

  

  3、从两外一个角度考虑Series,可以认为它是一个长度固定且有序的字典。可以将字典型的数据直接转换成Series型数据,并且在将字典传递给Series构造函数时,可以通过指定字典键的顺序使产生的Series保持一定的顺序。

sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
obj1 = pd.Series(sdata)
obj1
>>>Out[5]: 
Ohio      35000
Oregon    16000
Texas     71000
Utah       5000
dtype: int64

states = ['California', 'Ohio', 'Oregon', 'Texas']    # 指定标签顺序
obj2 = pd.Series(sdata,index=states)
obj2                                
>>>Out[9]:                           *** NaN使是pandas标记缺失值或NA值的方式
California NaN Ohio
35000.0 Oregon 16000.0 Texas 71000.0

pd.isnull(obj2)      # pandas中使用isnull和notnull函数来检查数据缺失。

>>>Out[10]:
California True
Ohio False
Oregon False
Texas False
dtype: bool

  4、Series自动对齐索引和Series对象自身和其索引都有name属性

***前面的obj1和 obj2相加
obj1 + obj2 >>>Out[13]: California NaN Ohio 70000.0 Oregon 32000.0 Texas 142000.0 Utah NaN dtype: float64

obj2.name = 'population'    # 指定name属性
obj2.index.name = 'state'

obj2
>>>Out[15]:
state
California NaN
Ohio 35000.0
Oregon 16000.0
Texas 71000.0
Name: population, dtype: float64

 

 

2、DataFrame简介

  1、DataFrame表示的是矩阵的数据表,既有行索引也有列索引,每一列可以是不同的值类型;DataFrame本身是二维的,但是可以分层索引在DataFrame中展现更高维度的数据。

  2、DataFrame有多种创建方式,常用方式是利用包含等长度列表或NumPy数组的字典来形成DataFrame;如果指定顺序,DataFrame的列将会按照指定顺序排列;

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]}
import pandas as pd
frame = pd.DataFrame(data)
frame
>>>Out[5]: 
   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

pd.DataFrame(data, columns=['year', 'state', 'pop'])        # DataFrame的列会按照指定的顺序排列
>>>Out[6]:
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

frame2 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'],    # 若传入的指定的列不存在,将会出现缺失值;可以修改默认标签
index=['one', 'two', 'three', 'four','five', 'six'])              
frame2
>>>Out[8]:
year state pop debt
one 2000 Ohio 1.5 NaN
two 2001 Ohio 1.7 NaN
three 2002 Ohio 3.6 NaN
four 2001 Nevada 2.4 NaN
five 2002 Nevada 2.9 NaN
six 2003 Nevada 3.2 NaN

 

  3、DataFrame中的一列可以按照字典标记或属性那样检索为Series.  格式:frame2['state']、frame2.year;x.columns会给出所有的标签。

frame2.year
>>>Out[10]: 
one      2000
two      2001
three    2002
four     2001
five     2002
six      2003
Name: year, dtype: int64

  4、对于大型的DataFrame,head()方法将来列出头部的5行;DataFrame中选取的列是数据的视图,而不是复制,因此对Series的修改会映射到DataFrame中,需要复制一列的话,采用Series的copy方法,格式:pd.Series.copy(x.column);如果需要复制DataFrame,格式:x.copy([len])。

  5、采用包含字典的嵌套字典创建DataFrame;

pop = {'Nevada': {2001: 2.4, 2002: 2.9},'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}
frame3 = pd.DataFrame(pop)
frame3
>>>Out[34]:             # 字典的键作为列,内部字典的键值作为行
      Nevada  Ohio
2000     NaN   1.5
2001     2.4   1.7
2002     2.9   3.6

  6、pandas中的索引对象是用于存储轴标签和其他元数据的,在构造Series和DataFrame时,使用的任意数组或标签序列都可以在内部转换成索引对象,索引对象也包含一系列方法,p135。

obj = pd.Series(range(3), index=['a', 'b', 'c'])
index = obj.index
index    # 索引对象是不可变的,用于无法对索引对象进行修改(尝试修改时会报错);
>>> Out[10]:                           
Index(['a', 'b', 'c'], dtype='object')