pandas—总结(1)基本数据结构及处理

# -*- 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)                                          # 某一层级的列进行统计

posted @ 2018-07-25 08:55  todaynowind  阅读(224)  评论(0编辑  收藏  举报