Pandas数据分析 (二)

数据初步探索

数据展示与文本读写

 三种展示数据的方式

  • head()
  • tail()
  • sample()  
    import pandas as pd
    import numpy as np
    
    df = pd.read_csv("anime.csv")
    
    # head(n) 可以显示前 n 个样本,n默认为5
    df.head()
    df.head(2)
    
    # tail(n) 显示末尾 n 个样本
    df.tail(2)
    
    # sample(n) 从数据中随机采样得到 n 个样本
    df.sample(2)

文件读写

Pandas提供了读取不同格式文件的接口

# 在读取文件的时候,有许多必要的参数需要指定,以便得到的数据可以直接用于后续的数据分析
# 分块读取
chunker = pd.read_csv("anime.csv", chunksize=4)
for piece in chunker:
    pass
# 使用piece做后续处理

# get_chunk()方法可以读取任意大小的块
df = pd.read_csv(‘anime.csv‘, iterator=True)
df.get_chunk(4)
  • 从文件读取数据很常用,把计算结果或数据结构所包含的数据写入数据文件也是一个必要操作,随时将终结结果持久化保存是一个良好的习惯
  • 在Pandas中,如果是一个DataFrame对象,可以使用 to_csv方法将该数据结构存入一个文件中
  • 在输出时,可以通过sys.stdout把最终存在文件中的内容打印出来,即直接输出在屏幕上
    # 读取 amine.csv 前三行,存入 anime_3.csv
    df = pd.read_csv(‘anime.csv‘, nrows=3)
    df.to_csv(‘anime_3.csv‘)
    import sys
    df.to_csv(sys.stdout)
    
    # 指定 grade 为索引列的情况
    df = pd.read_csv(‘anime.csv‘, nrows=3)
    df.to_csv(sys.stdout, index=False)  #  防止读取文件时多出包含位置信息的一列

数据类型与数据筛选

  • 当一个 Series 只包含字符串或者包含多个数据类型时,dtype 是 object类型
    1 pd.Series([1, 2, ‘f‘])
    2 df.dtypes

类型转换

  • 对多列进行转换,向 astype()方法传入一个字典,字典中的键值对格式为列名:目标数据类型

数据筛选

- select_dtypes() 方法可以筛选出特定数据类型的特征
- 两个参数
    - include 筛选时选取的数据类型
    - exclude 筛选时剔除的数据类型
1 df.select_dtypes(include=object, exclude=‘int32‘)
2 df.dtypes
3 df.select_dtypes(exclude=‘int64‘)

描述性统计

  • 描述性统计包括
    • 将数据转换成一个具体数值的聚合方法,例如 sum(), mean() 和 求百分比 quantile()
    • 返回结果是一个series方法,例如累和cumsum(),累积cumprod()
  • 参数axis,默认 axis=0,对索引index进行操作,axis=1 对列 columns 进行操作
    df.mean(0)  # 返回所有列的均值
    df.mean(1)[:3]  # 计算前5个样本所有数值型特征的均值
    
    df_number = df.select_dtypes(include=‘number‘)
    df_number.head(1)
    
    df0 = df_number.iloc[0]
    df0.mean()
    
    df.count()  # 查看非缺失值样本的数量

汇总统计

  • pandas 提供了四种常用的汇总方法
    • describe()
    • info()
    • cov()
    • corr()
      # describe() 方法可以查看各种特征的均值,标准差,最小值,最大值以及分位数
      df.describe()
      
      # info() 方法显示各列数据的类型,非空值数量等
      df.info()
      
      # cov() 协方差,描述各种特征之间的关系
      # 协方差的绝对值不反应线性相关的程度
      df.cov()
      
      # corr() 相关系数,表示线性相关的方向和线性相关的程度,值域为[-1, 1]
      df.corr()

算术运算

  • pandas 对象在进行加减乘除二元运算时,会自动根据索引对齐数据
  • 不重叠的索引处会引入缺省值
  • 除了使用 +-*/ 外,add(), sub(), mul(),div()
  • 当一个 DataFrame对象与一个Series对象进行算术运算时,存在广播行为
 

缺失值的数量分析

  • isnull()
    • True => 1 False => 0 可以用 sum() 方法进行行列的缺失值个数求和
  • 缺失值填补
    • fillna() 方法进行填补
    • 第一种方法,使用同一个值进行填补所有的缺失值
      • df.fillna(0)
    • 第二种填补方式,使用前一个值huo后一个值进行填补,设置method参数实现
      • method 可选值,参数:fill/pad 前向填充值,bfill/backfill 后向填充值
      • df.fillna(method=‘fill‘)
    • 第三种填补方式,对不同列的缺失值使用不同的值进行填补
      • df.fillna({‘One‘: 0, ‘Three‘: 1})
    • 第四种填补方式, 使用一个pandas对象进行填补
      • 利用 pandas的自动对齐功能,直接向fillna() 传入 Pandas对象 df.fill(df.mean())
 

修改索引

  • 修改标签
    • 结合lambda函数实现,将所有列明的前两个字母转换为大写,其余为小写
      df.rename(columns=lambda x:x[:2].upper()+x[2:].lower())
# 层次化索引
data = pd.Series(np.random.randn(5), index=[[‘a‘, ‘a‘, ‘b‘, ‘b‘, ‘b‘], [‘a1‘, ‘a2‘, ‘b1‘, ‘b2‘, ‘b3‘]])

data.index

相关推荐