Pandas入门教程

作者: 圆圆KK | 来源:发表于2019-01-27 19:50 被阅读0次

    NumPy、Pandas、Scipy是python的三个库,也是数据分析的常用库。其中,numpy学习强烈推荐NumPy中文文档。Pandas是基于NumPy的一种工具,数据操作更加方便,这里总结了Pandas的一些教程,更多内容查看官方文档说明

    安装包
    pip install pandas
    
    载入包
    import pandas as pd
    
    创建数组

    pandas常用数据结构中,一维Series,二维DataFrame,三维Panel
    Series 数据结构与list相似,但只允许存储相同的数据类型,同时,Series可以自定义索引,索引默认从0开始递增。

    pd.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)
    
    pd.Series(["小兰","女",24,"Beijing"],list("abcd"))
    

    输出:


    a 小兰
    b 女
    c 24
    d Beijing
    dtype: object


    DataFrame 可看做Series组成的字典,通常定义DataFrame可用dict定义,类似于excel和myslq的表格。
    pd.DataFrame(data = None, index = None, columns = None, dtype = None, copy = False )

    #举例
    dict = {"name": ["小兰","小民","小红"],
           "sex":["女","男","女"],
           "age":[24,20,21],
           "city":["Beijing","Beijing","Tianjin"]}
    df = pd.DataFrame(dict)
    

    输出:

    name sex age city
    a 小兰 24 Beijing
    b 小民 20 Beijing
    c 小红 21 Tianjin

    DataFrame还可以通过info直接查看数据类型和统计,dtypes查看数据类型,shape查看形状,describe汇总统计。

    df.info()
    df.dtypes
    df.shape
    df.describe()
    

    info()输出如下,可以查看数据类型和数量,空值数量


    <class 'pandas.core.frame.DataFrame'>
    Index: 3 entries, a to c
    Data columns (total 4 columns):
    name 3 non-null object
    sex 3 non-null object
    age 3 non-null int64
    city 3 non-null object
    dtypes: int64(1), object(3)
    memory usage: 120.0+ bytes


    增删行列

    增加列,和字典操作一样,可以通过直接在后面插入列的方式,另外还可以使用insert函数

    pd.DataFrame.insert(loc, column, value, allow_duplicates=False)

    df[新增列名] = [内容] #增加列,默认插入到最后一列
    #举例
    data = [1,1,2]
    df.insert(0,"class",data) #loc为指定位置,这里为0,则插入开头
    
    class name sex age city
    a 1 小兰 24 Beijing
    b 1 小民 20 Beijing
    c 2 小红 21 Tianjin

    增加行

    pd.DataFrame.append(other, ignore_index=False,
    verify_integrity=False, sort=None)

    #举例
    dict_1 = {"class":[2,2],
              "name": ["小新","小花"],
              "sex":["男","女"],
              "age":[19,22],
              "city":["Shanghai","Tianjin"]}
    df_1 = pd.DataFrame(dict_1,list("ab"))
    df_2 = df.append(df_1,ignore_index=True) #ignore_index为是否重新排序,True重新排序,False则为原本序号
    
    class name sex age city
    0 1 小兰 24 Beijing
    1 1 小民 20 Beijing
    2 2 小红 21 Tianjin
    3 2 小新 19 Shanghai
    4 2 小花 22 Tianjin

    删除行列
    删除列,可使用pop()以及del直接删除,删除行列则可以使用drop(),建议使用drop()而不是del,因为drop()不改变原数据,而是重新生成新的数据,同样的还有append()。

    pd.DataFrame.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')#axis = 0表示行,1表示列,默认为0

    df.pop("age") #删除并返回age列
    del df["age"] #直接删除age列
    
    #举例
    df_2.drop(index=[1,2],columns= "city") #表示删除1,2行以及city列
    df_2.drop("city",axis=1) #删除city列
    df_2.drop([1,2]) #删除1、2行
    
    修改索引

    如果需要修改数组的索引,可以使用rename()

    pd.DataFrame.rename(mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False, level=None)

    #举例
    df_2.rename({0:"a",1:"b",2:"c",3:"d",4:"e"}) #直接修改,默认修改index
    df_2.index=["a","b","c","d","e"] #使用index或columns直接修改会改变原数据,rename()则不改变原数据
    df_2.rename(str.upper,axis="columns") #将列名改为大写,axis默认为"index"
    df_2.rename(index= lambda x: x+2)  #修改行序号为
    df_2.rename(columns={"age":"年龄"}) #修改age列为“年龄”
    

    修改值,可以直接通过

    索引和切片

    通过索引方式直接选取列,可以使用方括号[ ],也可以直接引用列名。

    df_2["age"]
    df_2[["age","city"]] #选取多列
    df_2.age
    

    行的选取可以通过iloc,loc以及ix,loc是location(位置),iloc的i是integer(整数),从名字就可以看出两者的区别。

    df.iloc[1]
    df.loc["b"]
    

    两者输出均为一样


    class 1
    name 小民
    sex 男
    age 20
    city Beijing
    Name: b, dtype: object


    pandas同样能够进行切片操作,还可以利用iloc方便进行切片操作,可以参考numpy切片

    df.iloc[1:3] #等同于df[1:3],df.loc[["b","c"]]
    df_2.iloc[1:3]
    df_2.loc[1:3]  #当行索引为默认数字时可使用loc,注意loc[1:3]为闭区间,取1,2,3行,区别df_2.iloc[1:3]
    

    通过切片可以方便地批量修改特定位置值,如:
    df_2[:4,3]=18
    df_2.iloc[1]["age"] =20
    可以试试下面的输出的结果

    df_2.iloc[:2,:3] 
    df_2.iloc[2,3]
    df_2.iloc[::2,::3]
    df_2.iloc[::-1]
    
    算术运算

    和numpy一样,pandas也能对数组进行运算

    add(other, axis='columns', level=None, fill_value=None)
    类似add()的还有sub(),mul(),div()......分别为加减乘除。

    sum(axis=None, skipna=None, level=None, numeric_only=None, min_count=0, **kwargs)
    类似sum()的还有max(),min()

    a = pd.DataFrame(np.arange(9).reshape(3,3))
    b = pd.DataFrame(np.arange(16).reshape(4,4))
    #输入代码查看结果
    a+b #a.add(b)
    a.div(b)
    a.add(b, fill_value = 0)
    a.add([5,5,6], axis="index")
    a.sum()
    a.sum(axis=1)
    a.max()
    
    查找缺失值

    数据常常需要先处理缺失值,再进行数据分析,这里用到fillna()或者replace()替换缺失值,dropna()去除缺失值。

    fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
    replace(to_replace=None, value=None, inplace=False, limit=None, regex=False, method='pad')
    dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

    c = pd.DataFrame([[np.nan, 2, np.nan, 0],
                       [3, 4, np.nan, 1],
                       [np.nan, np.nan, np.nan, 5],
                       [np.nan, 3, np.nan, 4]],
                      columns=list('ABCD'))
    c.fillna(1) #替换空值为1
    c.replace(np.nan,1) #同上
    c.dropna(axis=1,how = "all") #删除所有值为空值的列,how="any"为任意值为空值,
    c.dropna(thresh = 2) #每行只有有2个非空值才保留
    c.dropna(subset=["D","A"]) #删除保留A、D列有空值的行
    
    数组合并、连接

    数据的合并、连接需要用到merge、join函数

    merge(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)

    join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)

    apply
    merge
    join
    piot_table
    assign
    groupby

    相关文章

      网友评论

        本文标题:Pandas入门教程

        本文链接:https://www.haomeiwen.com/subject/eogjjqtx.html