前言
pandas有两个重要的数据结构:series 和 dataframe
你使用pandas的第一步就是引入pandas(就和java要引入包一样)
#引入pandas
from pandas import Series,DataFrame
import pandas as pd
import numpy as np
Series
Series是一种类似于一维数组的对象,它由一组数据和与之相关的标签(索引)组成,接下来创建一个最简答的Series
创建Series
由一组数据简单创建
- 没有指定索引,索引默认从0开始
obj = Series([4,7,-5,3])#简单创建,没有指定索引,索引默认从0开始
obj
可以使用Series的values和index属性获取其数组表示形式和索引对象
obj.values
obj.index
- 指定索引创建
#指定索引创建
obj2 = Series([4,7,-5,3],index = ['d','b','a','c'])
obj
通过索引的方式选取Series的单个或者一组值
#通过索引的方式选取Series中的单个或者一组值
obj2['a']
选取值大于0的数据
值都乘以2
取以e为底的指数
可以把Series看成是一个定长的有序字典,因为它是索引值到数据值得一个映射。于是它就可以使用许多需要字典参数的函数中:
字典创建Series
如果只是传入字典,不指定索引,那么Series的索引就是字典的键(有序排列)
sdata = {'ohio':3500,'Texas':71000,'Oregon':1111}
obj3 = Series(sdata)
obj3
states = ['California','ohio','Oregon',Texas']
obj4 = Series(sdata,index = states)
obj4
在上面的例子中stata的索引会和传入的states索引相匹配的三个值找出来并发到相应的位置上,但是由于’California’对应在sdata的值找不到,所以结果就是NAN(”非数字”not a number,在pandas表示缺失值)。
pandas的isnull和notnull函数可以用于检测缺失值
Series也有类似的实例方法:
name属性
Series对象本身和索引都有一个name属性
Series的索引可以赋值修改
DataFrame
DataFrame是一个表格型的数据结构,含有一组有序的列,每列可以是不同的数值。DataFrame有行索引也有列索引
创建DataFrame
直接传入由等长列表或者Numpy数组组成的字典
data = {'state':['Ohio','Ohio','Ohio','Neveda','Neveda'],
'year':[2000,2001,2002,2003,2004],
'pop':[1.5,1.7,3.6,2.4,2.9] }
frame = DataFrame(data)
frame
从上面可以找到,DataFrame自动加上了行索引,且全部有序排列
指定列序列,DataFrame的列就会按照指定的顺序排列
#指定了列序列,就会列就会按照指定的顺序排列
DataFrame(data,columns = ['year','state','pop'])
和Series一样,如果传入的列在数据中找不到,就会产生NA值
#传入的列在数据中找不到,就会产生NA值
frame2 = DataFrame(data,columns = ['year','state','pop','debt'],index = ['one','two','three','four','five'])
frame2
通过columns属性返回列索引
通过类似字典标记或者属性的方式,可以将DataFrame的列获取为一个Series:
赋值方法修改列
列表或者数组赋值给DataFrame某个列时,长度必须和DataFrame列的长度长度匹配。如果赋值的是一个Series,Series的索引就会精确匹配DataFrame的索引,所有的空位都将被填上缺失值
val= Series([-1.2,-1.5,-1.7],index = ['two','four','five'])
frame2['dept'] = val
frame2
如果为不存在的列赋值,就会创建出一个新列。
frame2['eastern'] = frame2.state=='Ohio'
frame2
关键字del用于删除列
【注意:】通过索引方式返回列的是相应数据的试图,不是副本。所以,对返回的Series所做的任何就地的修改全都反应在源DataFrame上。通过Series的copy方法可以显示的复制列
嵌套字典(字典中的字典)
外层字典的键作为列索引,内层字典的键作为行索引
结果转置
如果不显示的指定索引,那么内层字典的键会被合并,排序形成最终的索引,如果显示指定了索引,就会按照指定索引的顺序排列,所有的空位会被缺失值填补
Series组成的字典也差不多
下图列出了DataFrame构造函数能接受的各种数据
DataFrame的name和columns属性
values属性
和Series一样,会以二维ndarray的形式返回DataFrame数据