Pandas知识总结

本文详细介绍Python数据处理库Pandas的安装及使用,涵盖Series与DataFrame的创建、操作、索引及排序方法,深入讲解数据增删改查技巧,适合初学者快速上手。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python3学习之Pandas

  • 安装pandas
    • 使用pip命令:
    • pip install pandas

进入正文:

import pandas as pd

Series模块

  • 通过pandas中的Series模块来创建pandas实例对象

    Series的数据可以不同类型,Series有索引列,可以给数据列取名字,ndarray必须同一种类型,ndarray只能有默认索引

    ser_obj = pd.Series(可迭代对象)

    1. 通过list构建Series
      ser_obj = pd.Series([1,2,3,4])

      将会生成一个有行索引(0,1,2,3)的‘一维’序列

      生成的序列为可迭代对象,可用for循环遍历。
      生成的序列可用list()方法转换为列表。

    2. 通过dict构建Series
      dict3 = {'y01' : 17.7,'y02' : 20.1 ,'y 03' : 16.5}
      ser_obj3 = pd.Series(dict3)

    3.可以在构建Series时指定索引,注意index

    • 位置索引(数字表示)

      • ser_obj = pd.Series(rang(10,20),index=(1,11))

        • 在Series中添加关键字index=(1,11),指定序列的索引从1开始10结束。
      • ser_obj.index = range(10,20)

        • Series对象中拥有index属性,可以通过这一属性来查询对象的索引,返回的是pandas中的indexes类型。还可以通过直接给Series的index属性直接赋值来改变index索引。
    • 标签索引

      • ser_obj = pd.Series(range(21,31),index=list('abcdefghij'))
        • 标签索引指除数字外的不可变数据类型。
          • 不可变的数据类型有:
            • object  字符串
            • int    整形
            • float   浮点型
            • str    字符串
            • datatime  时间类型
            • tuple   元组
            • bool   布尔型
    • Series对象的其他属性:

      • Series.values   #返回Series的值
      • Series.head(n)  #查看前n条数据,默认为n=5
      • Series.tail()   #查看后n条数据,默认为n=5
      • Series.dtype  #返回Series的数据类型
      • Series.ndim  #返回Series的维度
      • Series.shape  #返回元组(),获取矩阵的形状
      • Series.name  #通过name属性设置矩阵name

DataFrame模块

DataFrame类型数据与Excel表及其类似,可以理解为多维的Excel表。

DateFrame拥有与Series的属性

  • 通过ndarray构建DataFrame

    arr = np.random.rand(5,4) 
    df_obj = pd.DataFrame(arr)
    
  • 通过多维数据构建DataFrame

    df = pd.DataFrame([['A','B',"C"],["D","E","F"],["H","i","j"]])
    
  • 通过Series构建DataFrame

     s= pd.Series(np.random.randn(5),name='temp',index=list("ABCDE"))
    

Series中可以使用concat方法在生成的列表中添加数据
df_5 = pd.DataFrame()
print(pd.concat([df_5,s]),axis=0,sort=False))
# 两个序列拼接 axis(轴向) Default = 0
s2 = pd.Series(np.random.randn(5),name='xxx',index= list("ABCDE"))
df_6 = pd.concat([s,s2],axis=1)


##Pandas中数据的访问以及增删改查
首先我们定义一个Pandas数据:

dict_data = {'A':1.,
             'B':pd.Timestamp("20161217"),
             'C':pd.Series(1,index=list(range(1,5)),dtype='float32'),
             'D':np.array([3]*4,dtype='int32'),
             'E':pd.Categorical(['Python','Java','C++','C#']),
             'F':'ChinaHadoop'}
df_obj = pd.DataFrame(dict_data)
  • 数据的访问

    • 访问A列数据 df_obj['A']
    • 访问E列数据 df_obj.E
  • 增加列

    • 新增G列并赋予D每一项+4的值 df_obj['G'] = df_obj.D + 4
  • 删除列

    • 删除G列 del(df_obj['G'])
    • 删除E列 del df_obj.E
  • 改数据

    • 修改单个元素 df_obj.iat[0,1] = 100
    • 修改整列数据 df_obj.B = 100

由于DataFrame一列数据的dtype都是一样的,如果修改行数据,需要给定一个list来修改行数据,否则列数据的dtype会变为object,且长度需要一样,否则会报错

排序

ser = pd.Series(np.random.randint(1,10,10))

Pandas中有位置索引、标签索引和混合索引(前两种重点介绍)

  • Series

    ascending为排序的方式true为升序,False为降序 Default = True
    • sort_index

      • 对标签索引进行排序 print(ser.sort_index(ascending=False))
    • sort_values

      • 对values值进行排序,by中传入排序的columns print(ser.sort_values((by='A')))
  • DataFrame

    • 由于数组中的行数据dtype不同,pandas不提供对行数据排序的方法

    • sort_index

      • 对行标签索引进行排序 df_obj.sort_index(axis = 0)
    • sort_values

      • 对某列的values进行排序,如果给出by 中给出索引的列表,会按照列表次序依次排序 df.sort_values(['A',"B"])

数组的切片

获取一行数据 使用loc or iloc
  • loc 标签索引 左闭右闭

    • 获取’2019-07-12’这一行 df.loc['2019-07-12']
  • iloc 位置索引 左闭右开

  • 切片

    • 关于iloc的切片 df.iloc[:3,1:3]

      这个切片取的是前三行,1,2列的数据(iloc左闭右开)

  • 取到A列的倒数第二个值 df[:-2]['A']

使用loc访问DataFrame 中的具体的值
  • loc iloc at iat

    • 访问’2019-07-12’行C列的值
      • df.loc[‘2019-07-12’,‘C’]
      • df.at[‘2019-07-12’,‘C’]
    • 访问第1行第2列的值
      • df.iloc[1,2]
      • df.iat[1,2]
  • bool应用

    • 返回A列的bool值,df.A>0
    • 返回A列bool值为True的行 df[df.A>0]
    • 对整个DataFrame进行筛选,True的留下,不符合的写作NaN df[df>0]
    • 利用条件索引的方式,True的位置数据保留,False的位置数据写作NaN df[df.iloc[0:3] > 0]
  • isin

  • isin只保留了所在的行,不符合的行去掉了 筛选条件是一个Series ,不符合isin条件的行删除,而不是写作NaN

    • 添加TAG列
    df['TAG'] = list('aabbcc')
    print(df[df.TAG.isin(['a','c'])])
    
  • DataFrame的增删改查

    • df.iat[0,1] = 100
    • 增删查参照Series

持续更新中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值