Python与机器学习(二) Pandas库

  • Pandas是数据再加工过程中使用的最广泛的工具,它包含为使数据分析更加快速便捷而设计的高级数据结构与数据操作工具。
  • Pandas基于NumPy开发,它不仅提供了很多方法和函数,使得处理数据更容易;而且它已经优化了运行速度,与使用Python内置函数进行数据处理相比,这个一个显著的优势。
  • NumPy、SciPy和Pandas三者构成了Python科学计算的支柱。

Series对象

  • Series对象除了支持使用位置作为下标存取元素之外,还可以使用索引标签作为下标存取元素,这个功能与Python的字典(dictionary)对象类似
  • 属性:index和values

DataFrame对象

创建对象

  • 指定全部数据+行索引+列名
df = pd.DataFrame(np.random.randn(6,4), index = np.arange(0,6), columns = list("ABCD"))
  • 从字典转换得到,假如字典内的数据长度不同,以最长的数据为准
pd.DataFrame( { 'A' : pd.Timestamp("20170415"), 'B' : pd.Series(1, index=list(range(4))), } )

DataFrame属性

  • index 行索引(包含列表和dtype)
  • columns 列名(包含列表和dtype)
  • values 二维数组
  • dtypes 表示每列变量的数据类型(每列的类型可以不同)
  • shape 行数和列数

DataFrame方法

  • info()返回基本描述,包括每一列的类型,长度,内存占用
  • count()返回每一列的非空行数
  • head(N=5) tail(N=5) 返回前/后5行数据
  • describe() 返回统计数据,包括计数、平均数、标准差、最大值、最小值及4分位差
  • T() 返回转置

存取

  • Python字典 pd.DataFrame(dict).to_dict()
  • Excel文档 pd.read_excel(filename).to_excel(filename)
  • CSV文档 pd.read_csv(filename).to_csv(filename)
  • 分隔符的文本文件 pd.read_table(filename)
  • SQL表 pd.read_sql(query, conn).to_sql(table_name, conn)
  • JSON字符串 pd.read_json(json_string).to_json(filename)

切片

  • 指定行,返回对应所有列的切片 df[0:3]
  • 指定行列标签 df.loc[‘a’:’c’,”one”]
  • 指定行列号iloc
df.iloc[[0,2], :]  #选取第一行及第三行的数据
df.iloc[0:2, :]      #选取第一行到第三行(不包含)的数据
  • 根据给定的索引类型自行判断是使用位置还是标签进行切片 df.ix[‘a’:’b’, 0]
  • 通过逻辑指针进行数据切片 df[(df.one >= 1) & (df.one < 3)]
    iloc是integer & location的缩写,即只能以数字为索引号进行切片操作

排序

  • sort_index(axis=0) 以轴的标签进行排序,axis默认为0(Y轴-行)
  • sort_values(by) 以数据值进行排序
  • sort() 以数据值进行排序,可指定多个域 df.sort(columns=[‘a’,’c’], ascending=[False,True])

基本运算

  • 加减乘除 df[“three”] = df[“one”]*10 + df[“two”]
  • 统计运算 df.sum()
  • 字符串操作 df.[‘Country’].str.upper()

数据预处理

数据缺失处理

  • 丢弃 dropna(axis=0, how=’any’, thresh=None)
    • axis轴参数可选值为0或1,默认值为0表示以列为标准删除缺失值,1则表示以行为标准删除
    • how参数可选的值为any或者all,all仅在切片元素全为NA时才抛弃该行(列)
    • thresh为整数类型,如thresh=3表示一行当中至少有三个NA值才将其保留
  • 填充 fillna(value=None, method=None, axis=0)
    • value参数除了基本类型外,还可以使用字典,这样可以实现对不同列填充不同的值 dfdata.fillna(value={1:111,2:222})
    • 可以传入Series的平均值或中位数 sdata.fillna(value=sdata.median())

检测和过滤异常值

  • 找出任意列绝对值超过3的值的所有行标 data[(np.abs(data)>3).any(1)]
  • 对异常值进行删除操作 data.drop(data[np.abs(data)>3])
  • 去除重复值 data.drop_duplicates([‘k1’], take_last=True)

参考:python机器学习

你可能感兴趣的:(机器学习)