# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# Series
s1=pd.Series([12, -1, 7, 9], index=["a", "b", "c", "d"]) # 创建Seris对象,指定index
print("s1:\n{}\ns1.index:{}\ns1.values:{}\n".format(s1, s1.index, s1.values)) # 查看索引、元素
print("s1[2]:{}\ns1[\"b\"]:{}\ns1[0:2]:\n{}\ns1[[\"b\",\"c\"]]:\n{}\n"\
.format(s1[2], s1["b"], s1[0:2], s1[["b", "c"]])) # 切片
arr=np.array([1,2,3,4])
s2=pd.Series(arr,index=["a","b","c","d"]) # 数组转换为Series
print("s2:\n{}\n".format(s2))
s3=pd.Series([1,0,2,1,2,3],index=["white","white","blue","green","green","yellow"])
s3.unique() # 返回不同元素
s3.value_counts() # 返回不同元素并对各元素计数
s3.isin([0,3]) # 判断所属关系
s3[s3.isin([0,3])] # 按条件筛选选值
s4=pd.Series([5,-3,np.NaN,14])
s4.notnull() # 空元素返回False,不为空的元素返回True
s4.isnull() # 空元素返回True,不为空的元素返回False
s4[s4.notnull()] # 筛选所有非空元素
s4[s4.isnull()] # 筛选所有空元素
dict1={"red":2000,"blue":1000,"yellow":500,"orange":1000}
s5=pd.Series(dict1) # 字典转换为Series。
colors=["red","yellow","blue","orange","green"]
s6=pd.Series(dict1,index=colors) #pandas会控制字典的键和数组索引标签之间的相关性。如遇缺失值处,pandas就会为其添加NaN
s7=s5+s6 # 两个Series元素相加。 对齐方式为结果得NaN
# 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]} # 定义字典
frame1=pd.DataFrame(data) # 字典转换为DataFrame,columns为字典的键
frame2=pd.DataFrame(data,columns=["object","price"],index=["a","b","c","d","e"]) # 选取字典中的部分数据,并设置index
frame2.columns # 返回df的columns
frame2.index # 返回df的index
frame2.values # 返回df的values
frame.rename(index=reindex,columns=recolumns) # 重命名index,columns
frame2["price"] # 选取指定列数据
frame2.ix[2] # 选取指定行数据
frame2.ix[[2,4]] # 选取指定多行数据
frame2.ix[1:3] # 选取连续多行数据
frame2["object"][3] # 选取指定列,行数据
frame1.index.name="id" # 为index指定名称
frame1.columns.name="item" # 为columns指定名称
frame1["new1"]=12 # 添加新列并对所有行赋相同值
frame1["new2"]=[3,1.3,2.2,0.8,1.1] # 添加新列并未每行赋值
ser=pd.Series(np.arange(5)) # 定义一个Series
frame1["new5"]=ser # 通过Series为df添加列,也可以用来更新原有列
frame1.isin([1,"pen"]) # 判断df中各元素是否在指定序列中
frame1[frame1.isin([1,"pen"])] # 根据上述条件选取元素
del frame1["new2"] # 删除指定列
frame1[frame1<12] # 根据条件选取元素
frame3=frame2.T # 取df的转置
ser = pd.Series([5,0,3,8,4], index=['r e d b l u e ' ,'yellow','white','green']) # 定义一个Series对象
ser.idxmin() # 返回索引值最小的元素
ser.idxmax() # 返回索引值最大的元素
serd = pd.Series(range(6), index=['white','white','blue','green1,'green1,'yellow']) # 定义一个含有重复标签的Series或df对象
serd.index.is unique # 查看Series或pd中是否存在重复的index项ser = pd.Series([2,5,7,4], index=['one','two','three','four'])
ser.reindex(['three','four','five','one']) # 调整index排序,新index添加NaN元素,也可以删除index
ser3 = pd.Series([1,5,6,3],index=[0,3,5,6])
ser3.reindex(range(6),method='ffill') # 自动填充,前值补后
ser3.reindex(range(6),method=’bfill') # 自动填充,后值补前
frame4 = pd.DataFrame(np.arange(16).reshape((4,4)),
index=['red' , 'blue1,"yellow,"white"],
columns=['ball','pen' ,pencil','paper'])
frame4.drop(['blue','yellow']) # 删除指定index
frame4.drop(['pen','pencil'],axis=l) # 删除指定columns
np.sqrt(frame) # 对df的每个元素求sqrt()
frame.apply(func) # 对df的每列使用func函数
frame.apply(func,axis=1) # 对df的每行使用func函数
frame.sum()/frame.mean() # 对df求特征值
frame.describe() # 求df的多个特征值
# 排序和位次
ser = pd.Series([5,0,3,8,4], index=['red','blue','yellow','white','green'])
ser.sort_index() # 根据标签字母表升序排序
ser.sort_index(ascending=False) # 根据标签字母表降序排序
frame.sort_index(axis=l) # 根据columns的字母按照字母表升序排列
ser.order() # 根据元素大小进行排序
frame.sort_index( by='列名称') # 根据指定列的元素大小进行排序
frame.sort_index(by=[‘pen','pencil']) # 根据指定多列元素大小进行排序
ser.rank() # 为序列的每个元素安排一个位次(初始值为1,依次加1) ,添加ascending=False表示降序
ser.rank(method='first') # 把数据在数据结构中的顺序(没有进行排序操作)作为它的位次
seq1.corr(seq2) # 求两个Series的相关系数
seq1.cov(seq2) # 求两个Series的协方差
frame.corr() # 求单个df的相关系数
frame.cov() # 求单个df的协方差
frame1.corrwith(frame2) # 求df与的行或列与其它df行或列的相关系数
ser = pd.Series([0,l,2,np.NaN,9], index=['red','blue'/yellow','white','green']) # 为元素赋NaN值
ser['white'] = None # 为元素赋NaN值
ser.dropna () # 删除所有的 NaN
ser[ser.notnull()] # 选取非NaN值
frame.dropna() # 删除含有NaN的行与列
frame.dropna(how="all") # 删除所有元素均为 NaN的行或列
frame.fillna(0) # 将所有NaN替换为指定元素
frame3.fillna({'ball':l,'mug':0,'pen' :99}) # 将不同列的NaN替换为不同的元素
# 多层级索引
mser = pd.Series(np.random.rand(8),
index=[['white*,'white','white',1 blue','blue','red1,'red','red'],
['up','down','right','up','down','up','down', 'left',]]) # 创建一个带多级index的Series
mser['white'] # 根据第1级index选取数据
mser[:, 'up'] # 根据第2级index选取数据
mser['white','up'] # 根据多级index选取指定位置元素
frame=mser.unstack() # 第2级index转为列
frame.stack () # 列转为第2级index
mframe = pd . DataFrame (np.random.randn(l6).reshape(4,4),
index =[[' white',‘white', 'red',’red '], ['up',’down ', 'up','down']],
columns=[['pen','pen',’paper',’paper'],[1,2,l,2]]) # 创建带有多级index和多级columns的df
mframe.columns.names = ['objects','id'] # 为各级columns指定名称
mframe.index.names = ['colors','status'] # 为各级index指定名称
mframe.swaplevel(’colorsVstatus’) # 调整层级顺序
mframe.sortlevel('colors') # 根据一个层级为数据排序
mframe.sum(level='colors') # 根据指定层级聚合数据
mframe.sum(level='id',axis=l) # 某一层级的列进行统计