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
'''
'

 

转载于:https://www.cnblogs.com/liuhuacai/p/11588243.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值