目录

Pandas的数据帧DataFrame

DataFrame的功能特点

DataFrame与Series的区别与联系

创建DataFrame对象

通过各种形式数据创建DataFrame对象

读取其他文件创建DataFrame对象

DataFrame属性和方法

DataFrame常用方法

获取数据

  索引和切片

 重塑数据

concat函数

merge函数

数据处理

数据清洗

数据分析

数据可视化

总结


Pandas的数据帧DataFrame

DataFrame的功能特点

  • 列可以有不同的类型

  • 大小可变

  • 标记轴(行和列)

  • 可以对行和列执行算术运算

  • DataFrame与Series的区别与联系

    区别:

    series,只是一个一维结构,它由index和value组成
    dataframe,是一个二维结构,除了拥有index和value之外,还拥有column
    联系:

    dataframe由多个series组成,无论是行还是列,单独拆分出来都是一个series

    创建DataFrame对象

    1. 通过各种形式数据创建DataFrame对象,比如ndarray,series,map,lists,dict,constant和另一个DataFrame

    2. 读取其他文件创建DataFrame对象,比如CSV,JSON,HTML,SQL等

    下面对这几种创建方式函数进行分析:

    通过各种形式数据创建DataFrame对象

    函数原型:

    DataFrame( data, index, columns, dtype, copy)

    参数说明:

    代码如下:

    import pandas as pd
    import numpy as np
    scores = np.random.randint(10, 100, (4, 3))
    courses = ['一', '二', '三']
    ids = [11, 12, 13, 14]
    df = pd.DataFrame(ids)
    df1 = pd.DataFrame(data=scores, columns=courses, index=ids)
    
    scores = {
        '一': [62, 72, 93, 88],
        '二': [95, 65, 86, 66],
        '三': [66, 75, 82, 69],
    }
    df2 = pd.DataFrame(data=scores, index=ids)
    df
    df1
    df2

    运行结果:

    读取其他文件创建DataFrame对象

    文件格式对应的读写操作如下:

    下面简单介绍几个常用的函数:

    read_csv函数:读取CSV文件,read_csv函数的参数非常多,重要的参数如下:

    ● filepath_or_buffer:用来指定数据的路径的

    ● sep: 用来指定数据中列之间的分隔符的,接收一个str对象。默认分隔符为逗号

    ● delimiter:也是用来指定分隔符的,和参数sep功能相同,但默认值为None

    ● delim_whitespace:也是用来设置数据中的分隔符的。接收一个布尔值,表示是否将空白字符作为分隔符

    ● header: 如果数据中包含表头,或者说列名,这个参数用来指定表头在数据中的行号。接收一个int对象或者由int构成的列表对象。默认值是infer。infer的行为如下:如果没有指定● names参数,infer就等价于header=0;如果指定了names参数,此时的infer等价于header=None。

    ● names:用来指定列名的

    ● index_col:如果我们希望把数据中的某一列数据作为index,就可以使用这个参数。默认值为None

    ● usecols:一个文件中的数据可能有很多列,有时候我们只需要部分列,这时候可以使用usecols参数

    ● squeeze:如果我们希望读取的数据只有一列,默认返回的是DataFrame,如果我们希望返回Series,可以使用这个参数。参数接收的是布尔值,默认为False,表示返回DataFrame,如果是True,则返回Series

    ● prefix:prefix这个参数可以指定一个前缀,这样列的序号会和这个前缀拼接到一块构成列名

    ● mangle_dupe_cols:这个参数接收一个布尔值,如果是True,若数据中存在同名列,如有两个name列,则第一个列名保持不变,第二个name列将被重命名为name.1。如果是FALSE会抛出ValueError异常。

    ● skiprows:来指定在读取数据时,我们想跳过哪些行

    ● skipfooter:表示不读取数据的最后n行

    ● nrows:指定pandas一次性从文件中读取多少行数据,这在读取海量数据中很有用

    ● na_filter:控制pandas在读取数据时是否自动检测数据中的缺失值。这个参数就是用来控制这个行为的。默认为True表示检测缺失值,如果设置为False,表示不检测缺失值

    ● skip_blank_lines:判断是否跳过空行。如果指定为True,表示跳过空行。指定为False,不跳过空行,空行数据正常读取但被全部转换为缺失值nan。默认值为True

    ● encoding:指定读取文件时使用的编码,通常是utf-8,可以根据自己文件的实际编码进行设置

    import pandas as pd
    # 如果导出的文件为gbk编码方式,导入数据的时候用gbk
    df = pd.read_csv(r'test.csv',,encoding="gbk",nrows =2)  #导入前两行
    df

    pandas read_sql 和 to_sql 读写Mysql的参数详解

    excel文件的函数请看:read_excel 和 to_excel 读写Excel的参数详解这篇文章

    DataFrame属性和方法

    DataFrame常用方法

    获取数据

      索引和切片

    `DataFrame`对象可以看做多个`Series`对象组成,所以它的“索引和切片”和`Series`对象是一样的。我们对`DataFrame`对象取某一行得到的就是一个`Series`对象。常用的索引和切片如下:

    1. 使用整数索引

    2.使用自定义的标签索引

    3.切片操作

    4.花式索引

    5.布尔索引

     重塑数据

    所谓重塑数据就是数据合并,即把多分不在一起数据合并在一起。这样方便我们做统计分析。

    concat函数

    pd.concat(object,axis=0,join='outer',join_axes=None,ignore_index=False,keys=None,levels=None,names=None,verify_integrity=False)

    参数说明

    object:series,dataframe或则是panel构成的序列list

    axis:需要合并连接的轴,0是行,1是列

    join:连接的方式inner,或者outer;如果是 inner 得到的是两表的交集,如果是outer,得到的是两表的并集

    join_axes:如果是join_axes的参数传入,可以指定根据那个轴来对齐数据

    append:append是series和dataframe的方法,使用他就是默认沿着行(axis=0,列对齐)

    ignore_index:使用ignore_index参数,为true时,合并的两个表就根据列字段对齐,然后合并,最后真理新的index

    import pandas as pd
    ids1 = [0, 1, 2, 3]
    scores1 = {
        'A': ["A0", "A1", "A2", "A3"],
        'B': ["B0", "B1", "B2", "B3"],
        'C': ["C0", "C1", "C2", "C3"],
        'D': ["D0", "D1", "D2", "D3"],
    }
    df1 = pd.DataFrame(data=scores1, index=ids1)
    ids4 = [2, 3, 6, 7]
    scores4 = {
        'B': ["B2", "B3", "B6", "B7"],
        'D': ["D2", "D3", "D6", "D7"],
        'F': ["F2", "F3", "F6", "F7"],
    }
    df4 = pd.DataFrame(data=scores4, index=ids4)
    result=pd.concat([df1,df4],axis=1)
    result

    运行结果如下:

    merge函数

    merge( left, right, how="inner", on=None, left_on=None, right_on=None, left_index=False,  right_index=False,  sort=False, suffixes=("_x", "_y"),  copy=True, indicator=False, validate=None)

    参数说明:
    left    左表
    right    右表
    how    连接方式,inner、left、right、outer,默认为inner
    on    用于连接的列名称
    left_on    左表用于连接的列名
    right_on    右表用于连接的列名
    left_index    是否使用左表的行索引作为连接键,默认False
    right_index    是否使用右表的行索引作为连接键,默认False
    sort    默认为False,将合并的数据进行排序
    copy    默认为True,总是将数据复制到数据结构中,设置为False可以提高性能
    suffixes    存在相同列名时在列名后面添加的后缀,默认为(’_x’, ‘_y’)
    indicator    显示合并数据中数据来自哪个表

    import pandas as pd
    ids1 = [0, 1, 2, 3]
    scores1 = {
        'A': ["A0", "A1", "A2", "A3"],
        'B': ["B0", "B1", "B2", "B3"],
        'C': ["C0", "C1", "C2", "C3"],
        'D': ["D0", "D1", "D2", "D3"],
    }
    df1 = pd.DataFrame(data=scores1, index=ids1)
    ids4 = [2, 3, 6, 7]
    scores4 = {
        'B': ["B2", "B3", "B6", "B7"],
        'D': ["D2", "D3", "D6", "D7"],
        'F': ["F2", "F3", "F6", "F7"],
    }
    df4 = pd.DataFrame(data=scores4, index=ids4)
    result = pd.merge(df1, df4, how='inner')
    result

    运行结果如下:

     有时候我们合并完数据之后,我们也希望能重置索引,并使用默认索引,那么我们可以使用‘reset_index’函数或者‘set_index’函数,如下:

    set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False)

    参数说明:
    append添加新索引,drop为False,inplace为True时,索引将会还原为列

    reset_index(level=Nonedrop=Falseinplace=Falsecol_level=0col_fill='')

    参数说明:

    level:可以是int, str, tuple, or list, default None等类型。作用是只从索引中删除给定级别。默认情况下删除所有级别。

    drop:bool, default False。不要尝试在数据帧列中插入索引。这会将索引重置为默认的整数索引。

    inplace:bool, default False。修改数据帧(不要创建新对象)。

    col_level:int or str, default=0。如果列有多个级别,则确定将标签插入到哪个级别。默认情况下,它将插入到第一层。

    col_fill:object, default。如果列有多个级别,则确定其他级别的命名方式。如果没有,则复制索引名称。

    返回:

    DataFrame or None。具有新索引的数据帧,如果inplace=True,则无索引

    数据处理

    数据清洗

    不管我们从哪里拿到数据,其实我们获取的数据都不会非常完美的。这些数据会有一些重复值或异常值,甚至还会有一些缺失值。那么我们要对数据进行处理分析的时候,就很希望这数据完美一些,所以我们在对数据处理分析之前,会清洗一下,经常使用的函数如下:


     例子:

    import pandas as pd
    ids1 = [0, 1, 2, 3]
    scores1 = {
        'A': ["A0", "A1", "A2", "A3"],
        'B': ["B0", "B1", "B2", "B3"],
        'C': ["C0", "C1", "C2", "C3"],
        'D': ["D0", "D1", "D2", "D3"],
    }
    df1 = pd.DataFrame(data=scores1, index=ids1)
    ids4 = [2, 3, 6, 7]
    scores4 = {
        'B': ["B2", "B3", "B6", "B7"],
        'D': ["D2", "D3", "D6", "D7"],
        'F': ["F2", "F3", "F6", "F7"],
    }
    df4 = pd.DataFrame(data=scores4, index=ids4)
    result=pd.concat([df1,df4],axis=1)
    result.isnull()

    运行结果如下:

    删除这些缺失值,如下:

    对空值进行填充,如下:

    重复值的判断:


    数据转换

    代码如下:

    import pandas as pd
    df = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'],
                       'C': [1, 2, 3]})
    pd.get_dummies(df, prefix=['col1', 'col2'])

    运行结果如下:

    数据分析

    我们拿到数据最重要的就是分析数据,从数据中迅速的解读出有价值的信息,然后解决我们当中的问题,那么有哪些统计和分析数据相关的方法呢?如下:

     我们使用一个实际的例子说明吧,如下:

    import pandas as pd
    import matplotlib.pyplot as plt
    df=pd.read_excel(r"test.xlsx",sheet_name=0)
    f=df.groupby(["班级","性别"])["学号"].count()
    f1=df.groupby(["班级","性别"])["英语"].mean()
    f2=df.groupby(["班级","性别"]).aggregate({"性别":"count","数学":"mean"})
    df['总成绩'] = df['数学'] +  df['英语']
    f3 = df.groupby('学号').总成绩.sum()
    f4 = pd.pivot_table(df, index='学号', values='总成绩', aggfunc='sum')
    f4.plot(figsize=(8, 4), kind='bar')
    plt.xticks(rotation=0)
    plt.show()

    运行分析结果如下:

     

    数据可视化

    一图胜千言,我们对数据进行透视的结果,最终要通过图表的方式呈现出来,因为图表具有极强的表现力,能够让我们迅速的解读数据中隐藏的价值。`DataFrame`对象提供了`plot`方法来支持绘图,底层仍然是通过`matplotlib`库实现图表的渲染。呈现结果如“数据分析”篇章运行结果所示。

    总结

    我们主要介绍了pandas当中‘DataFrame’对象的经常使用的一些知识点和方法,熟练掌握对于我们搞定数据分析非常有帮助。如果大家想学习更多pandas相关方法,请看pandas官网  。。希望该文章对你有所帮助,哈哈哈哈哈哈~ 感谢阅读!觉得能帮助到您,可以点个赞,关注一下哈~谢谢~

    物联沃分享整理
    物联沃-IOTWORD物联网 » Pandas的应用—DataFrame

    发表评论