panda库是基于numpy的第3方库,因此需要
import pandas as pd
import numpy as np
两大基本数据类型
1.Series和DataFrame
Series:一维数据结构,类似于数组,但强于数组
- 声明series对象
s = pd.Series([12, 4, 7, 9]) #普通声明
s1 = pd.Series([12, 4, 7, 9],indes['a','b','c','d']) #指定index
s.values #查看元素
s1.index #查看索引
- 选择元素和赋值
s[2] #默认index为2
s1['b'] #index为b
s[0:2] #索引从0到2
s[['b','c']] #索引从b到c
s[1] = 0 #改变索引为1的值为0
s['b'] = 1 #改变索引为1的值为0
- 以numpy数组或series对象重定义series对象
arr = np.array([1,2,3,4])
s = pd.Series(arr) #以numpy数组生成
s1 = pd.Series(s) #series对象生成
- 筛选元素
s[s>8]
- 运算和函数
s/2
np.log(s) #需要调用np
- Series元素组成元素
serd = pd.Series([1,0,2,1,2,3],index=['w','w','b','g','g','y'])
serd.unique() #去重
serd.value_count() #显示重复次数和去重
serd.isin([0,3]) #判断列表元素是否包含在对象中(dataframe对象也适用)
- 非数值NaN (not a number)
s = pd.Series([5,-3,np.nan,14]) #包含非数字值的series对象
s.isnull() #判断是否有非数值
s.notnull()
- Series用作字典
dict = {'red':200,'blue':100,'yellow':500,'orange':1000}
my_series=pd.Series(dict)
color=['red','yellow','orange','blue','green']
my_series=pd.Series(dict,index=color) #列表形式指定index
- Series对象运算
dict2={'red':40,'yellow':1000,'black':200}
my_series2 = pd.Series(dict2)
my_series1+my_series2 #对齐一致的相加
DateFrame对象:表格型数据对象结构
- 定义DataFrame对象
data = {'color':['blue','green','yellow','red','white'],
'object':['ball','pen','pencil','paper','mug'],
'price':[1.2,1.0,0.6,0.9,1.7]}
frame = pd.DataFrame(data)
- 指定index和columns选项
frame2 = pd.DataFrame(data,index=['one','two','three','four','five'],columns=['object','price'])
- 选取元素
frame['price']
frame.price
frame.ix[2] # ix属性选取行索引
frame.ix[[2,4]] # 选取多行
frame[0:1] # 通过类似切片的方法选取行
frame['object'][3] # 选取单个元素
- 赋值
1.给行和列标签设置二级标签
frame.index.name='id';frame.columns.name='item'
2.添加新的列
frame['new']=12
frame['new']=[3.0,1.3,2.2,0.8,1.1] # 更新该列
- 将一个series对象赋给dateframe的提格列
ser = pd.Series(np.arange(5))
frame['new']=ser
4.给单个元素赋值
frame['price'][2]=3.3
- 筛选
frame[frame < 12]
- 转置
frame.T
index对象
index对象声明后是不可改变,除了某些情况
- index对象的方法
ser.idxmax() # 返回最大值
ser.idxmin() # 返回最小值
- 含重复标签的index
serd = pd.Series(range(6),index=['w','w','b','g','g','y'])
serd['w']
serd.index.is_unique # is_unique属性,查看是否存在重复的索引值
- 更换索引
serd = pd.Series(range(6),index=['w','w','b','g','g','y'])
serd.reinde(['g','w','g','w','y','b','r'])
- 索引的自动编制功能
ser2 = pd.Series([1,2,6,3],index=[0,3,5,6])
ser2.reindex(range(6),method='ffill') # 更新索引,并自动填充少的数,mothod指缺少处取前一个数
ser2.reindex(range(6),method='bfill') # 取后一个值
- 删除
ser2 = pd.Series([1,2,6,3],index=[0,3,5,6])
ser2.drop(['3','6']) # 删除多行
frame=pd.DataFrame(np.arange(16).reshape((4,4)),
index=['red','blue','white','yelllow'],
columns=['ball','pen','pencil','paper'])
frame.dorp(['blue','yellow']) # 删除行
frame.drop(['pen','pencil'],axis=1) #删除列4
函数操作
- 通用函数
sqrt() #平方根
- 按行列操作的函数
lambda函数
f = lambda x: x.max() - x.min() # 自定义函数
# 等价于
def f(x):
return x.max() - x.min()
- 应用apply()函数在dataframe中调用
frame.apply(f) #处理行
frame.apply(f,axis=1) # 处理列
- 统计函数
frame.sum()
frame.mean()
frame.describe()
- 排序和排次位
ser.sort_index()
ser.sort_index(ascending=Flase) # 降序排列
frame.sort_index()
frame.sort_index(axis=1)
ser.order() # 对series对象进行排序
frame.sort_index(by='pen')
frame.sort_index(by=['pen','paper'])
ser.rank() # 位次
ser.rank(method='first')
ser.rank(ascending=Flase)
NaN数据:缺失值
np.nan
- 为元素赋NaN值
ser=pd.Series([0,1,2,np.nan,9],index=['red','blue','yellow','white','green'])
- 过滤掉nan
ser.dropna()
ser[ser.notnull()] # 将notnull作为选取元素的条件
frame = pd.DataFrame([[6,np.nan,6],[np.nan,np.nan,np.nan],[2,np.nan,5]],
index=['blue','green','red'],
columns=['ball','mug','pen'])
frame.dropna(how='all') #避免删除整行或整列,指定为all/any
- 为nan元素填充其他值
frame.filllna(0)
frame.fillna('ball':1,'mug':0,'pen':99) #指定要填充的值
网友评论