pandas的两大数据结构:Series和DataFrame. Series用于储存一个序列一样的一维数据;DataFrame用于多维数据。
一. Series: 跟数组numpy类似,多了一些额外的功能。主数组的每个元素都有一个与之相关的标签,存储在Index里。
import pandas as pd
import numpy as np
s=pd.Series([12,2,3,4])
声明Series时,若不指定标签,默认从0开始。也可以指定标签。
s=pd.Series([12,3,4,5],index=['a','b','b','d'])
a=np.array([1,2,4,5])
b=pd.Series(a)
查看index和values:
s.index
s.values
元素引用:s[2], s['c'], s[0:3], s[['b','c']]
元素赋值:s[0]=3, s[3]=5, s['c']='abc'
筛选元素:
s[s>3],
数学运算:
s/2, s*3, s+2, np.log(s)
去重unique():
s.unique(),返回一个去重后的元素。
value_counts(), 返回各个不同的元素,并计算元素在Series中的个数。
isin(), 用来判断所属关系,判断给定的一列元素是否包含在Series数据结构中。isin()返回布尔值。
s.isin([1,3])
NaN: 数据结构中如果字段为空或者不符合数字的定义时,用NaN表示。
s=pd.Series([1,2,3,4,np.NaN,5])
isnull()和notnull()用来判断NaN元素,返回布尔值。在通过布尔值可以取出不为空的值或者空值。
s[s.notnull()或者s[s.isnull()]
将字典转化为Series数据结构:
ding={'name':'ding','age':23,'location':'CD'}
s=pd.Series(ding)
将列表作为index传给Series:
colors=['red','green','blue','yellow']
s=pd.Series(ding, index=colors)
Series对象之间的运算:只对index标签相同的元素进行运算得到一个新的Series对象。它能够通过标签对齐,其中标签不一致的值为NaN
二. pandas: 数据结构跟excel类似,类似于将Series使用场景应用的多维。各列的数据结构可以是不同类型的。
定义方法:通常通过传递一个dict字典对象来构造。
data={('colors':[],'object':[],'price':[])}
frame=pd.DataFrame(data)
也可以只选取data中的部分数据来构造DataFrame()
frame=pd.DataFrame(data, columns=['object','price'])
如果没有指定index标签,会自动从0开始,指定标签。也可以指定特定的标签.
frame=pa.DataFrame(data, index=['one','two', 'three','four'])
选取元素:
选取所有列的名称:frame.columns
获取索引的列表:frame.index
获取所有的元素:frame.values
获取一列,用列名称即可:frame['price'],返回一个Series对象
另一种获取列的方法:frame.price
获取一行的数据:frame.ix[3]
获取多行:frame.ix[[1,2,5]]
获取多行:frame.in[0:5]
获取某一个元素,需要指定列名称和行名称:frame['price'][4]
赋值:
用name属性为index和columns指定名字
frame.index.name='id'
frame.columns.name='item'
添加一列:
frame['new']=12
frame['new']=[23,45,67]
修改某一列的值类似。
用Series给某一列赋值:
ser=pd.Series(np.arange(4))
frame['new']=ser
isin()原属所属关系,和Series方法类似:
frame.isin([1,'pen'])
返回布尔值。
frame(frame.isin([1,'pen']))得到一个新的DataFrame,包含满足条件的值,其他值为NaN.
删除一列:
del frame['new']
筛选:
frame[frame>4],大于4的值返回,其他值为空。
转置:frame.T
用嵌套字典生成DataFrame对象,pandas会将外部的键当作列名称,将内部的键当作index索引。
book={‘red’:{2000:22,34,56},'blue':{2012:23,45,12},'white':{2034:123,345,567}}