pandas数据操作

pandas数据操作

索引操作:
  • series索引

    • ser_obj[‘label’] 通过索引名称访问

    • ser_obj[pos] 索引位置访问

      import pandas as pd
      
      ser_obj = pd.Series(range(5), index = ['a', 'b', 'c', 'd', 'e'])
      print(ser_obj.head())
      print('--------------')
      
      # 行索引
      print('通过索引名称:',ser_obj['a'])
      print('--------------')
      print('通过索引位置:',ser_obj[0])
      

      运行结果:
      在这里插入图片描述

  • 切片访问 ser_obj[2:4] ser_obj[‘label1’ : ‘label3’]

    • 按索引名切片时是包含终止索引的

      # 切片索引
      print('通过索引位置:\n',ser_obj[1:3])
      print('--------------')
      print('通过索引名称切片是包含终止索引:\n',ser_obj['b':'d'])
      

      运行结果:
      在这里插入图片描述

  • 不连续索引 ser_obj[[‘label1’, ‘label2’, ‘label3’]] ser_obj[[pos1, pos2, pos3]]

    # 不连续索引
    print(ser_obj[[0, 2, 4]])
    print('--------------')
    print(ser_obj[['a', 'e']])
    

    运行结果:
    在这里插入图片描述

  • 布尔索引

    # 布尔索引
    ser_bool = ser_obj > 2
    
    print(ser_bool)
    print('--------------')
    print(ser_obj[ser_bool])
    print('--------------')
    print(ser_obj[ser_obj > 2])
    

    运行结果:
    在这里插入图片描述

  • dataframe索引

    • 列索引 df_obj[‘label’]

      import numpy as np
      
      df_obj = pd.DataFrame(np.random.randn(5,4), columns = ['a', 'b', 'c', 'd'])
      print(df_obj.head())
      
      # 列索引
      print('--------------')
      print('列索引')
      print(df_obj['a']) # 返回Series类型
      
      

      运行结果:
      在这里插入图片描述

  • 不连续索引

    • df_obj[[‘label1’, ‘label2’]]

      # 不连续索引
      print(df_obj[['a','c']])
      

      运行结果:
      在这里插入图片描述

索引操作总结:
  • pandas索引可归纳为3种

    • .loc 标签索引

      # 标签索引 loc
      # Series
      print(ser_obj['b':'d'])
      print('--------------')
      print(ser_obj.loc['b':'d'])
      print('--------------')
      
      # DataFrame
      print(df_obj['a'])
      print('--------------')
      print(df_obj.loc[0:2, 'a'])
      

      运行结果:
      在这里插入图片描述

    • .iloc 位置索引

      # 整型位置索引 iloc
      print(ser_obj[1:3])
      print('--------------')
      print(ser_obj.iloc[1:3])
      print('--------------')
      
      # DataFrame
      print(df_obj.iloc[0:2, 0]) # 注意和df_obj.loc[0:2, 'a']的区别
      

      运行结果:
      在这里插入图片描述

    • .ix 标签与位置混合索引

      • 先按标签索引尝试操作,然后按位置索引尝试操作

        # 混合索引 ix
        print(ser_obj.ix[1:3])
        print('--------------')
        print(ser_obj.ix['b':'c'])
        print('--------------')
        
        # DataFrame
        print(df_obj.ix[0:2, 0]) # 先按标签索引尝试操作,然后再按位置索引尝试操作
        

        运行结果:
        在这里插入图片描述

  • dataframe索引时可将其看作ndarray操作

  • 标签的切片索引是包含末尾位置

运算与对齐:
  • 按索引对齐运算,没对齐的位置补NaN

    • series 按行索引对齐

      s1 = pd.Series(range(10, 20), index = range(10))
      s2 = pd.Series(range(20, 25), index = range(5))
      
      print('s1: ')
      print(s1)
      print('--------------')
      print('s2: ')
      print(s2)
      print('--------------')
      
      # Series 对齐运算
      s1 + s2
      

      运行结果:
      在这里插入图片描述

    • dataframe按行、列索引对齐

      import numpy as np
      
      df1 = pd.DataFrame(np.ones((2,2)), columns = ['a', 'b'])
      df2 = pd.DataFrame(np.ones((3,3)), columns = ['a', 'b', 'c'])
      
      print('df1: ')
      print(df1)
      print('--------------')
      
      print('df2: ')
      print(df2)
      print('--------------')
      
      # DataFrame对齐操作
      df1 + df2
      

      运行结果:
      在这里插入图片描述

  • 填充未对齐的数据进行计算

    • 使用add,sub,div,mul

      # 填充未对齐的数据进行运算
      print(s1)
      print('--------------')
      print(s2)
      print('--------------')
      
      s1.add(s2, fill_value = -1)
      

      运行结果:
      在这里插入图片描述

    • 同时通过fill_value指定填充值

      print(df1)
      print('--------------')
      print(df2)
      df1.sub(df2, fill_value = 5.)
      

      运行结果:
      在这里插入图片描述

  • 填充NaN

    • fillna

      s3_filled = s3.fillna(-1)
      print(s3_filled)
      

      运行结果:
      在这里插入图片描述

函数应用:
  • 可直接使用numpy的ufunc函数,如abs等

    # Numpy ufunc 函数
    df = pd.DataFrame(np.random.randn(5,4) - 1 )
    print(df)
    print('--------------')
    
    print(np.abs(df))
    

    运行结果:
    在这里插入图片描述

  • 通过apply将函数应用到行或列上

    • 轴的方向默认axis=0(列)

      # 使用apply应用行或列数据
      print(df.apply(lambda x : x.max()))
      

      运行结果:
      在这里插入图片描述

  • 通过applymap将函数应用到每个数据上

    # 使用applymap应用到每个数据
    f2 = lambda x : '%.2f' % x
    print(df.applymap(f2))
    

    运行结果:
    在这里插入图片描述

排序:
  • sort_index 索引排序

    s4 = pd.Series(range(10, 15), index = np.random.randint(5, size=5))
    print(s4)
    print('--------------')
    
    # 索引排序
    s4.sort_index()
    

    运行结果:
    在这里插入图片描述

    • 对dataframe操作时注意轴的方向

      df4 = pd.DataFrame(np.random.randn(3, 4), 
                         index=np.random.randint(3, size=3),
                         columns=np.random.randint(4, size=4))
      print(df4)
      

      运行结果:
      在这里插入图片描述

  • 按值排序

    • sort_values(by = ‘label’)

      # 按值排序
      df4.sort_values(by=1)
      

      运行结果:
      在这里插入图片描述

处理缺失数据:
  • 判断是否存在缺失值

    df_data = pd.DataFrame([np.random.randn(3), [1., np.nan, np.nan],
                           [4., np.nan, np.nan], [1., np.nan, 2.]])
    print(df_data.head())
    
    # isnull
    df_data.isnull()
    

    运行结果:
    在这里插入图片描述

    • ser_obj.isnull() df_obj.isnull()
  • dropna 丢弃缺失值,可指定轴

    # dropna
    df_data.dropna()
    

    运行结果:
    在这里插入图片描述

  • fillna 填充缺失值

    # fillna
    df_data.fillna(-1.)
    

    运行结果:
    在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sweeney Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值