pandas相关操作

Posted liuhuacai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas相关操作相关的知识,希望对你有一定的参考价值。

import pandas as pd
import numpy as np
‘‘‘
一.创建df
    1.定义df  :传递字典
    1.1每一列的名称作为键   每个键都有一个数组作为值【key:数组】
    1.2 嵌套字典生成df      一级元素的key作为列名  二级元素的key作为行名
    1.3选择需要的创建df     pd.DataFrame(dict,columns=[‘key1‘,‘key2‘])
    1.4指定df的标签(index)pd.DataFrame(dict,columns=[‘key1‘,‘key2‘],index = [‘one‘,‘two‘,`````])
    
    2.定义df  :数据矩阵 + index  + columns
    2.1 直接传入  值 标签  列名    pd.DataFrame(np.arange(16).reshape(4,4),index=[‘one‘,‘two‘,....],columns=[‘object‘,‘‘,..])
    
二.选取元素
    1.取值
    1.1查看  【标签  列名  值 】  frame.index   frame.columns  frame.values
    1.2取一列 frame[[‘object1‘,‘object2‘]]   frame.object
    1.3取行 frame[1:3]
    1.4取单个值    frame[‘object‘][2]    df----Series-----索引取值
    
    2.赋值
    
    2.1 给行列标签命名    frame.index,name = ‘id‘     frame.columns.name = ‘item‘
    2.2 添加一列          frame[‘new‘] = 12      翻译为      frame[‘new‘] = [12,12,12,12]
    2.3 修改一列          frame[‘new‘] = Series    
    2.4 修改单个值        df --  列series  --  索引      frame[‘new‘][2] = 3
    
    
    3. 判断元素是否在df中
    
    3.1  df = frame.isin([1.0,‘pen‘])
    
    4.删除列
    4.1 del frame[‘new‘]
    
    5.筛选
    5.1 全部筛选   frame[frame<12]
    5.2 筛选某一列 frame[frame.new<12]
    
    6.转置
    frame.T  
    
三.index对象
    1.确定是否有重复索引    serd.index.is_unique    frame.index.is_unique
    2.对于重复索引     serd[‘重复索引‘]  返回一个Series     frame[‘重复索引‘]  返回Frame
    3.Series.reindex([索引数组],method=‘ffill‘)   frame.reindex([索引数组],method=‘ffill‘,columns=[‘‘,‘‘,....])
    
    4.删除drop()  返回【不包括已删除索引及元素的新对象】 ser.drop([‘‘,‘‘])删除多个索引,要用数组输入
    删除行 :Frame.drop([‘‘,‘‘,‘‘])
    删除列 :Frame.drop([‘‘,‘‘,‘‘],axis=1)
    
    5.元素级  数据对其及运算(加)
    
    4.1两个series对象   都有的标签,对应数据相加   只有其中一个对象有的index  NaN填充
    4.2两个Frame对象    两个frame都有的index 和 columns  对应元素相加   反之用NaN填充
    
四.数据结构间的运算   
    1.加减乘除(元素级):【满足广播机制】
    a.add(b)
    sub()
    div()
    mul()
    
五.函数应用和映射【库函数】
    1.操作元素的函数(通用函数)
        np.sqrt(frame)  ##每个元素的平方根
    2.按行列操作的函数
    f = lambda x:x.max()-x.min()
    frame.apply(f)           ###按行计算
    frame.apply(f,axis=1)    ###按列运算
    
    2.1返回多个值
    def f(x):
        return pd.Series([x.max(),x.min(),],index=[‘min‘,‘max‘])
    frame.apply(f)
    
    3.统计函数
    frame.sum()
    frame.mean()
    frame.describe()
    
    
    4.排序
    
    4.1  ser.sort_index()
    4.2  ser.sort_index(axis=1)
    4.3  frame.sort_index()
    4.4  frame.sort_index(axis=1)
    
    4.4  frame.sort_index(by=[‘columns1‘,‘columns2‘])
    
    5.排位次    rank
    
    ser.rank()
    ser.rank(mothod=‘‘first)
    ser.rank(ascending=False)
    
    6.相关性corr() 和 协方差  cov()
    
    
    7.NaN数据
    7.1创建np.NaN     pd.series([1,2,3,np.NaN,4],index=[‘ ‘,‘ ‘,.....])
    7.2过滤NaN        ser.dropna()   ser[ser.notnull()]     frame.dropna()行或列有一个有NaN都会被直接删除
                                                            frame.dropna(how=‘all‘)行列所有元素都为NaN时删除
    7.3为NaN填充值
    frame.fillna(0)  所有NaN填充0
    frame.fillna(‘ball‘:1,‘mug‘:0,‘pen‘:99)   不同列的NaN替换成不同的值
    
    
    8.等级索引和分级
    8.1 等级索引:
    mser = pd.Series(np.random.rand(8),index=[[‘white‘,‘white‘,‘white‘,‘blue‘,‘blue‘,‘red‘,‘red‘,‘red‘],
                                          [‘up‘,‘down‘,‘right‘,‘up‘,‘down‘,‘up‘,‘down‘,‘left‘]])
    white  up       0.322237
           down     0.093246
           right    0.181997
    blue   up       0.887448
           down     0.032504
    red    up       0.612139
           down     0.125961
           left     0.030511
    dtype: float64
    
    print(mser[‘white‘])
    print(mser[:,‘up‘])
      
    dtype: float64
    up       0.256720
    down     0.849860
    right    0.581021
    dtype: float64
    white    0.256720
    blue     0.412591
    red      0.893404
    dtype: float64
    
    print(‘选取特定元素:‘,mser[‘white‘,‘up‘])
    选取特定元素: 0.9149258487509073
    
    
‘‘‘
mser = pd.Series(np.random.rand(8),index=[[white,white,white,blue,blue,red,red,red],
                                          [up,down,right,up,down,up,down,left]])
print(mser)
print(mser[white])
print(mser[:,up])
print(选取特定元素:,mser[white,up])
a = mser.unstack()
print(转化成df:\n,a)
‘‘‘
转化成df:            
down      left     right        up
blue   0.241679       NaN       NaN  0.025439
red    0.225099  0.410451       NaN  0.180735
white  0.266825       NaN  0.536098  0.900275
‘‘‘
print(df转化成series:\n,a.stack())
‘‘‘
df转化成series:
blue   down     0.241679
       up       0.025439
red    down     0.225099
       left     0.410451
       up       0.180735
white  down     0.266825
       right    0.536098
       up       0.900275
dtype: float64

‘‘‘


###行列都定义等级索引
mframe = pd.DataFrame(np.random.randn(16).reshape(4,4),
                      index=[[white,white,red,red],[up,down,up,down]],
                      columns=[[pen,pen,paper,paper],[1,2,1,2]])
print(mframe)
‘‘‘
                 pen               paper          
                   1         2         1         2
white up    1.729195 -0.451135 -0.497403 -0.938851
      down -1.267124  0.422545  0.069564 -0.735792
red   up    0.298684 -0.442771  1.301070  0.234371
      down  2.266180 -0.549653  0.108434 -0.394364
‘‘‘

###重新调整顺序和为层级排序
mframe.columns.names=[object,id]   ##列名加分类名
mframe.index.names=[colors,status] ##行名加分类名
print(mframe)
‘‘‘
object              pen               paper          
id                    1         2         1         2
colors status                                        
white  up      0.288562 -0.519511  0.516333  0.643500
       down    1.759466 -1.194383 -0.624583  1.027694
red    up      0.425757 -1.028554 -0.660548  1.074917
       down    0.242714 -0.550235 -0.749478 -0.015347

‘‘‘
##调整顺序   colors和status列换位置  swaplevel
print(mframe.swaplevel(colors,status))
‘‘‘
object              pen               paper          
id                    1         2         1         2
status colors                                        
up     white  -0.937241 -1.051002  0.621721  1.227554
down   white   0.951904  0.585412 -0.315780 -0.336806
up     red    -1.824083  0.284429  0.310883  0.031538
down   red     0.851415  0.598169  1.967784 -0.421712
‘‘‘

 

以上是关于pandas相关操作的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 的groupby操作

第3次翻译了 Pandas 官方文档,叒写了这一份R万字肝货操作!

pandas网页操作基础

Pandas的常见使用方法操作

pandas操作mysql从放弃到入门

在内置“滚动”之外对 Pandas Dataframe 进行滚动窗口操作的最佳方法?