Pandas基础操作



1、读取CSV

CSV(Comma-Separated Values,逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。

  pd.read_csv(filepath_or_buffer,
              sep=',',  header='infer', names=None, index_col=None,
              usecols=None, prefix=None, skiprows=None,
              skipfooter=0, nrows=None, skip_blank_lines=True,
             )

👍其中值得注意的是:

  • header
    • 默认将待读取数据第一行作为标题行:如果待读取的数据没有标题行,则注意设置header=None,
  • index_col
    • 可以设置某一列作为整个数据的索引:如果不指定,则会默认设置自然索引

2、索引操作

2.1建立索引

  • 1)在读取数据时指定索引

    df = pd.read_excel(data, index_col='name') # 设置索引为 name
    
  • 2)使用df.set_index()

    df.set_index('month') # 设置月份为索引
    df.set_index(['month', 'year']) # 设置月份和年为多层索引
    

👍注意:在上述(2)操作中,并没有修改原来的df变量中的内容,如果希望设置索引后的数据替换原来的df变量中的内容可以通过:

  • 1)、赋值操作

    df = df.set_index('month')
    
  • 2)、传入inplace参数

    df.set_index('month',inplace=Ture)
    

事实上,df的很多操作都是不修改df变量中的数据的,这也是为了数据的安全操作。

2.2其他一些操作

  df.reset_index():将所有(也可部分)的索引去除,恢复到自然索引(0-n)值
  df.rename():修改行列的索引值,要提供原有的索引值
  df.set_axis():将所需索引值指定给指定轴,不需要原有的索引值
  df.rename_axis():设置轴的索引名
  df.reindex():对现有的索引按给定的索引值顺序排列,如不存在的值为 Nan,支持缺失值填充方法
  df.reindex_like():取其他表的索引值作为自己的索引值,相当于 df.reindex(index=other.index, columns=other.columns,...)
  df.sort_index():按索引值(可指定轴)对数据进行排序

3、数据的信息

  • 1)查看样本

    df.head()
    df.tail()
    df.sample()
    
  • 2)数据形状

    df.shape
    #会返回一个数组,第一个代表行数,第二个代表列数,这就是这个数据的基本形状,也是数据的大小。
    
  • 3)基础信息

    df.info()
    #显示有数据类型、索引情况、行列数、各字段数据类型、内存占用等。Series 不支持。
    
  • 4)数据类型

    df.dtypes
    #会返回每个字段的数据类型。
    

👍如果是series对象则是不加s的 s.dtype

  • 5)行列索引内容

    df.axes
    #会返回一个列内容和行内容组成的列表 [列索引, 行索引]。
    
  • 6)其他信息

    df.index
    #返回行索引内容
    df.columns
    #列索引内容
    

4、统计计算

  • 1)描述统计

    df.describe()
    #会返回一个有多个行的所有数字列的统计表,每个行是一个统计指标,有总数、平均数、标准差、最大最小值、四分位数等。
    #无数字列则会输出与字符相关的统计数据
    
  • 2)数学统计

    df.mean()
    df.max()
    df.min()
    df.abs()
    ...

👍注意:在使用这些统计函数时可以指定axis=1/‘columns’ 或者axis=0/‘index’
这里区分一下这两者的区别!

  • axis=1/‘columns’
    比如说:df.mean(axis=1):

    意思是跨列操作,一次只能读一列,比如说先读到0行0列,再读到0行1列...直至列依次跨完后,就会得到每一行的不同均值

    df.mean(1).head()
    
    '''
    0    49.50
    1    41.75
    2    54.75
    3    84.50
    4    65.25
    dtype: float64
    '''
    
  • axis=0/‘index’
    比如说:df.mean(axis=0):

    意思是跨行操作,一次只能读一行,比如说先读到0行0列,再读到1行0列
    因此df.mean(axis=0)计算的是每一列的不同均值

    df.mean(0).head()
    
    '''
    Q1    41.75
    Q2    54.75
    Q3    84.50
    Q4    65.25
    dtype: float64
    '''
    
  • 3)非统计计算

    #逻辑运算
    df.any(df["Q1">=60])  #选出满足“Q1”>=60的行
    df.all()
    
    #指定列保留几位小数(四舍五入)
    df.round({"Q1":2,"Q4":3})
    
    #每个列的去重数量(注意与s.unique的区别!)
    df.nunique()
    

👍 Series专用的函数,而且常用的

  s.value_counts() #计算不重复值的数量
  s.unique() #去重

5、位置计算

  • 位置差值diff()

    #计算本行与前一行的差值(即当前值比上一行增加了多少)
    #无前一行的本行值为 NaN
    df.diff()
    
    df.diff(axis=1) #跨列操作,计算该行值在 当前列和左一列的差值
    
    df.diff(2)  #当前行与前2行 这两行的差值
    
    df.diff(-1) #新的本行为本行减去后一行
    
  • 位置移动shift()

    #整体下移一行,最顶的一行为 NaN
    df.shift()
    df.shift(3) # 下移三行
    
    #整体上移一行,最底的一行为 NaN
    df.shift(-1)
    
    #向右移动一位
    df.shift(axis=1)
    df.shift(3, axis=1) #向右移三位
    
    #向左移动一位
    df.shift(-1, axis=1)
    
  • 位置序号 df.rank()
    生成数据的排序值,并用排序值替换原来的数据值(可以指定轴)

    df.rank(axis=1) #横向排名,计算该数值在不同列间的排序值
    

6、数据选择

操作 语法 返回结果
选择列 df[col] Series
按索引选择行 df.loc[label] Series
按数字索引选择行 df.iloc[loc] Series
使用切片选择行 df[5:10] DataFrame
用表达式筛选行 df[bool_vec] DataFrame

👍其中值得注意的

  • 1、切片区间左闭右开
  • 2、df.loc[<行表达式>,<列表达式>]非常灵活,表达式可以是列表、或者标签切片(闭区间)

参考文档

1、《深入浅出Pandas》

posted @ 2022-04-13 14:28  朝南烟  阅读(217)  评论(0编辑  收藏  举报
body { color: #000; background-color: #e6e6e6; font-family: "Helvetica Neue",Helvetica,Verdana,Arial,sans-serif; font-size: 12px; min-height: 101%; background: url(https://images.cnblogs.com/cnblogs_com/caolanying/1841633/o_2009041…ly1geq8oc9owbj21hc0u0th5.jpg) fixed; } #home { margin: 0 auto; opacity: 0.8; width: 65%; min-width: 1080px; background-color: #fff; padding: 30px; margin-top: 50px; margin-bottom: 50px; box-shadow: 0 2px 6px rgba(100, 100, 100, 0.3); }