zoukankan      html  css  js  c++  java
  • Python三方库:Pandas(数据分析)

    Pandas是一个基于Numpy的数据分析包,这个库就是为数据分析而生的,你可以像操作Excel一样操作Pandas,实现数据的选择排序、筛选过滤、统计分析等功能,实际上,Pandas就是Python中的Excel,在学习Pandas之后你会更加深刻的理解这句话是多么的形象准确的。

    为了简化表示,本文示例中的pd表示pandas库,即import pandas as pd。

    一、基础数据结构DataFrame和Series

    Pandas中最基础的数据结构就是DataFrame和Series,从数组的角度理解,可以将DataFrame看作是二维数组,将Series看作是一维数组,当然,最直观的理解就是DataFrame是一个Excel表格,由行索引、列名和数据(二维数组)组成,而Series是则表中的一列数据,只有行索引和数据(一维数组)两部分。

    1. 创建DataFrame和Series

    一个DataFrame可以看作是由行索引、列名及数据(二维数组)三部分构成,对于行索引,在Pandas中的处理是比较特殊的,比如有n行数据,默认情况下,行索引会是我们熟悉的从0到n-1的索引号,但是我们也可以自己指定每一行的行索引,或者说是行标签,通过行标签同样也能取到对应行的数据。当然,列名如果没有指定,同样是0到n-1的序号。

    通过列表创建DataFrame:

    通过字典创建DataFrame:

    通过文件创建DataFrame:

    csv文件数据

    代码示例

    通过列表创建Series:

    2. 查看DataFrame和Series

    DataFrame和Series对象有许多快速查看自身信息的属性和方法,因为Series的许多属性和方法与DataFrame都是相似的,所以这里就只列一些DataFrame中比较常用的:

    • DataFame.columns:表格的列名。
    • DataFame.dtypes:列的数据类型。
    • DataFame.index:表格的行索引。
    • DataFame.size:表格中的元素个数。
    • DataFame.values:表格中的数据,返回的是一个二维数组对象。
    • DataFame.head(n):默认展示表格前5行数据,也可以指定展示前n行数据。
    • DataFame.tail(n):默认展示表格末尾5行数据,也可以指定展示默认n行数据。
    • DataFame.info():查看表格的一个简单汇总信息,包括有多少行、有多少列、每列的数据类型等信息。

    简单示例:

    二、索引操作

    这里说的索引指的是行索引或者说行标签,Pandas中关于行索引有许多巧妙且实用的用法,能帮助我们更好的进行数据分析,具体见示例代码。

    对于索引的使用,即可以像Numpy中那样去操作Pandas中的索引,也可以使用iloc()方法和loc()方法去操作索引,区别在于iloc()方法只能用于原始的0到n-1索引,而loc()方法可以将自己指定的行标签像索引一样去操作,具体见示例代码。

    三、常用方法

    因为Pandas的核心是Numpy库,所以Numpy中的一些特色用法在Pandas中也是可以使用的,比如通过算术运算符实现对每个元素的加减乘除等操作,以及使用max、mean等统计方法在Pandas中也都是支持的。

    以下列举一些DataFrame和Series的常用操作和方法(具体的参数使用请参考对应的帮助文档或官方API文档),为了简化表示,df代表DataFrame对象,s代表Series对象,具体使用效果见示例代码。

    • [df/s]+3:就像Numpy中的数组操作一样,表示对表格中的每个元素进行加法运算,当然,其他的算术运算也是可以的。(这里的3只是举例用的数字)
    • [df/s].max():返回表格中各列的最大值。
    • [df/s].min():返回表格中各列的最小值。
    • [df/s].mean():返回表格中各列的平均值。
    • [df/s].replace(to_replace=None, value=None):将表格中的to_replace替换为value。
    • [df/s].append(other):将一个表格追加到另一个表格中,并返回一个合并之后的新表格。
    • [df/s].drop(labels=None, axis=0, index=None, columns=None):删除指定内容。
    • [df/s].drop_duplicates():删除重复值,可以使用subset参数删除指定列的重复值。
    • [df/s].isnull():判断表格是否为空。
    • [df/s].fillna(value):将空值填充为指定值。
    • pd.cut(x, bins, labels=None):按照bins参数给数组x分段,如果x是一个具体的数字,则会将数组平均分成x段,如果x是一个列表,则按照列表表示的区间来分段,同时可以使用labels参数给每个区间指定一个label。
    • df.describe():将表格中数据类型为数字的元素筛选出来,然后按列进行一些简单的统计。
    • df.cov():计算斜方差。
    • df.corr():计算相关系数,计算结果在[-1, 1]之间,1表示两者的变化趋势是相同的,-1则表示变化趋势是相反的,0则表示变化趋势完全不相关。
    • df.copy()或s.copy():返回一个表格的副本。
    • df.sort_values(by, ascending=True):按照by参数指定的列进行排序,可以使用ascending参数指定以升序排序。
    • s > 3:返回列中每个元素的条件判断结果(即布尔索引),用法和Numpy一样。(这里的3只是举例用的数字)
    • s.value_counts(ascending=False, bins=None):对列中的每个值进行个数统计,可以使用ascending参数指定统计结果以升序排列,使用bins参数让统计结果分段显示。
    • s.lower():转化为小写。
    • s.upper():转化为大写。
    • s.len():返回字符串的长度。
    • s.strip():去除两边空白内容,其他类似功能还有lstrip()和rstrip()。
    • s.replace(pat, repl):将字符串中的pat替换为repl。
    • s.split(pat=None, expand=False):将字符串根据pat分隔,返回一个DataFrame对象,如果指定expand为True,会将DataFrame“拉直”变为一个Series对象。
    • s.contains(pat):判断是否包含指定值pat。
    • s.get_dummies(sep='|'):指定分隔符,并返回一个DataFrame对象,这个方法常用于关联分析。

    四、SQL功能

    Pandas中有一些方法能实现像SQL一样的功能,如groupby方法可以实现SQL中的分组功能,merge方法可以实现SQL中的表连接功能,具体见示例代码。

    五、透视表

    所谓透视表,就是使用pivot()方法或pivot_table()方法从原本的表格中抽取三列内容并将其转换为另一个表格,以便更直观、更方便地去观察和分析这三列数据,具体效果看了示例就明白了。

    六、时间处理

    Pandas中有一套自己的时间字符串处理方法,而且使用起来也很方便,如pd.Timestamp()可以将字符串转换为时间戳,pd.Timedelta()可以进行时间的加减运算,pd.to_datetime()可以将字符串转换为日期。如果遇到了时间格式字符串,建议优先考虑Pandas自带的时间处理方式。

    七、批量处理map和apply

    如果想要对表格中某行或某列的所有元素执行同一个操作,可以使用map()方法, 而想要对表格中所有行或所有列都执行同一个操作,则可以使用apply()方法。

  • 相关阅读:
    【LeetCode】Validate Binary Search Tree
    【LeetCode】Search in Rotated Sorted Array II(转)
    【LeetCode】Search in Rotated Sorted Array
    【LeetCode】Set Matrix Zeroes
    【LeetCode】Sqrt(x) (转载)
    【LeetCode】Integer to Roman
    贪心算法
    【LeetCode】Best Time to Buy and Sell Stock III
    【LeetCode】Best Time to Buy and Sell Stock II
    CentOS 6 上安装 pip、setuptools
  • 原文地址:https://www.cnblogs.com/guyuyun/p/13296646.html
Copyright © 2011-2022 走看看