• pyhton pandas数据分析基础入门(一文看懂pandas)


    //2019.07.17

    pyhton中pandas数据分析基础入门(一文看懂pandas),

    教你迅速入门pandas数据分析模块(后面附有入门完整代码,可以直接拷贝运行,含有详细的代码注释,可以轻松帮助你入门理解)

    1.1 pandas模块简介

    首先,使用pandas相应的操作之前都需要导入pandas模块

    import pandas as pd
    import numpy as np #导入pandas和numpy模块

    1、pandas中具有两种常见的数据结构:
    (1)Series
    它是指一维列表或者数组(列向量),和numpy中的array比较类似,可以储存很多不同类型的数据类型;
    (2)DataFrame
    二维型的数据结构,和Excel表格比较类似,它可以理解为是Series的容器。

    1.2 pandas里面的series类型应用:
    1、对于series的定义:
    s=pd.Series([1,2,3,np.nan,2,3,1,...],index=["a","b","c","d","e"...])
    其中对于index是对于每一行数字属性的规定
    2、对于series的索引index,其实质是指列表的行标签,可以serie.index来进行查询和输出;

    1.3 DataFrame二维列表的相关操作大全
    (一)构造DataFrame二维列表的方式
    1、对于DataFrame的二维列表数据的出入主要有两种方式:传入二维数组和使用字典的定义方法
    方式一:df=pd.DataFrame(np.random.randn(6,4)) #二维数组的传入方法
    方式二:df=pd.DataFrame({"A":[1,2,3,4,5],"B":["1,1,2,1,1"],"C":list("abcde"),"D":["yanjiangyi"]*5}) #字典的传入方式
    2、对于二维列表各行各列的属性名称定义主要采用的是index(各行名称)和columns(各列名称):
    df=pd.DataFrame(np.random.randn(6,4),index=pd.date_range("20180701",periods=6,freq="M"),columns=[list("abcd")])
    3、关于DateFrame的字典数据传入方式,其中字典的key指的是列表的列名称,即columns的取值,另外对于每一列的取值主要有以下六种方式,都可以传入数组:
    df=pd.DataFrame({"A":1.0,"B":np.array([3]*4,dtype=int),"C":pd.Timestamp("20190701"),"D":pd.Series([1.21,2.21,3.24,4.26],dtype=float),"E":pd.Categorical(["a","b","c","d"]),"F":"abc"})
    (二)DataFrame二维数组的数据的查询
    1、头尾数据查询:采用函数.head(x)和.tail(x)可以查询前后x行的数据;
    2、查看表格数据的每一列数据类型可以采用df.dtypes来进行查看数据类型;

    1.4pandas读取数据及其数据操作
    1、pandas读取表格数据的方式是采用自带的函数pd.read_excle(表格的路径)和pd.read_csv(表格的路径)
    例如:
    df=pd.read_excel("D:/Byrbt2018/Study/Python数据分析课程+练习+讲解/Python数据分析课程+练习+讲解/作业/作业3/作业3/香港酒店数据.xlsx") #表格的读取操作主要依靠的是pd.read_excel/csv函数+文件路径
    2、提取表格中的某几行某几列数据的方式:
    (1)采用属性名称的方式:
    df.loc[行属性A:行属性B,列属性:列属性]
    (2)采用表格下标的方式:
    df.iloc[行序号:行序号,列序号:列序号]
    (3)直接采用数组的方式:
    df[[列属性1,列属性2,列属性3...]][行号:行号]
    (4)采用标准格式:
    df.loc[[index,,...],[columns,,...]] #先行后列
    3、表格行的增加和删减
    (1)增加一行:
    先用字典定义好这一行的新的数据(字典的key是表格的各列属性),然后将其转换为series一维列表,之后采用表格的增添函数df.append(s)来进行添加这一行的数据,另外还可以用s.name来定义新添加行的行属性名称
    s={0:"天水宾馆",1:"休闲娱乐",2:"天水",3:"甘谷县",4:"中关村街道",5:4.5,6:11000,7:345} #先定义一行数据,利用字典的操作来进行定义新的一行
    s1=pd.Series(s) #转换字典为一维列表
    s1.name=420 #定义列表的行属性
    (2)删减其中一行:
    直接调用pandas模块的删减函数df.drop([行号])函数来进行删减相应需要删减的某一行数据。
    4、列的相关操作
    (1)列的增加:
    列的增加通过直接增加定义就可以:
    df["序号"]=range(1,len(df)+1) #增加了序号这一个新的列
    (2)列的删减:
    列的删减可以通过df.drop["列属性名称",axis=1]来进行操作,其中axis=1必须要设置,他表示删除的是列而不是行,如果不写axis或者设置axis=0,表示的是要进行删减的行:
    df.drop["列属性名称",axis=1]
    5、有关数据条件选择的操作:
    关于数据条件性选择主要可以采用df[(选择条件)]来继续操作,举例如下:
    print(df[df.评分>4.5]) #选择评分高于4.5的数据列表
    print(df[(df.评分>4.5 )& (df.类型=="浪漫情侣")]) #选择评分高于4.5并且类型属于浪漫情侣的数据列表
    print(df[((df.类型=="香港")|(df.日常人数>1000))&(df.评分>4.5)])
    #选择类型时香港或者日常人数超过1000人的,并且评分高于4.5的数据列表
    6、对于数据缺失值和异常值的处理操作:
    (1)缺失值的处理主要包含以下四个操作:
    isnull(返回一个布尔型的数据类型,判断是否为缺失值)
    notnull(和isnull正好相反,判断不是缺失值)
    fillna(对于缺失值进行填充)
    dropna(对于缺失值进行相应的删减过滤)
    (2)缺失值的处理规则:
    #数据缺失值及其异常值的处理
    对于缺失值的删减dropna()主要有三个参数:how=all(删掉所有 行和列),inplace=Ture(实时对于删减的表格进行更新),axis=0或者1(删减处理的是行或列)
    print(df.isnull())
    print(df[df["评分"].isnull()]) #缺失值的判断和输出
    #对于缺失值的填充
    print(df[df["评价人数"].isnull()]) #首先判断是否有残缺值
    df["评价人数"].fillna(np.mean(df["评价人数"]),inplace=True) #缺失值的填充和实时更新inplace=1
    print(df)
    print(len(df[df["评价人数"].isnull()]))
    print(len(df))
    print(len(df.dropna()))
    df.dropna(inplace=True)
    print(len(df))

    #异常值的处理
    异常值一般主要是判断表格里面的数据是否和列属性的性质不符(比如对于人数属性的列数据存在一小数点负数的情况),然后结合判断的情况进行数据的处理和更新
    print(len(df[df["日常人数"]%1!=0])) #对于异常值的判断和处理
    df=df[(df["日常人数"]%1==0)&(df["日常人数"]>0)] #根据异常值的条件进行实时更新
    print(df)

    整体的入门运行代码如下所示(可以直接拷贝运行,含有详细的代码注释,可以轻松帮助你入门理解):

    import pandas as pd
    import numpy as np #导入pandas和numpy模块

    # Series一维列表操作
    s=pd.Series([1,2,3,4,np.nan,2,3,4,6,7])
    print(s)
    print(s.index) #输出series的行标签(属性)
    print(s.values) #输出series的取值
    print(s[2:9:2]) #隔行输出相应的值(切片操作)
    s.index.name="属性" #定义列表series的属性名称
    print(s)
    s.index=list("abcdefghij") #重新定义表格每一行的属性名字
    print(s)
    print(s["a":"h":2]) #提取其中一部分,进行相关的的切片操作

    # Dataframe二维列表操作大全
    date=pd.date_range("20180101",periods=6,freq="D") #生成时间序列
    print(date)
    df=pd.DataFrame(np.random.randn(6,4),index=date,columns=list("abcd")) #定义随机数的二维列表6x4,然后定义各行各列的名称(index和columns)
    df.index.name="date"
    print(df)
    df1=pd.DataFrame({"A":1.0,"B":np.array([3]*4,dtype=int),"C":pd.Timestamp("20190701"),"D":pd.Series([1.21,2.21,3.24,4.26],dtype=float),"E":pd.Categorical(["a","b","c","d"]),"F":"abc"})
    print(df1)
    print(df1.values) #查看数据的值
    print(df1.index) #查看数据的行属性名称
    print(df1.head(3)) #c查看数据的前三行
    print(df1.tail(3)) #查看数据的后三行
    print(df1.dtypes) #查看表格数据的每一类数据类型

    #数据表格的读取与各种操作
    df=pd.read_excel("D:/Byrbt2018/Study/Python数据分析课程+练习+讲解/Python数据分析课程+练习+讲解/作业/作业3/作业3/香港酒店数据.xlsx") #表格的读取操作主要依靠的是pd.read_excel/csv函数+文件路径
    print(df)

    #表格的行操作
    print(df.iloc[0]) #采用下标的形式来进行数据的查询df.iloc[:,;]
    print(df.iloc[:5]) #采用下标的形式来进行数据的查询df.iloc[:,;]
    print(df.loc[0:5,0:3]) #采用行和列属性的形式来进行数据的查询df.iloc[:,;]
    #增加一行操作
    s={0:"天水宾馆",1:"休闲娱乐",2:"天水",3:"甘谷县",4:"中关村街道",5:4.5,6:11000,7:345} #先定义一行数据,利用字典的操作来进行定义新的一行
    s1=pd.Series(s) #转换字典为一维列表
    s1.name=420 #定义列表的行属性
    print(s1)
    df=df.append(s1) #增加一行数据操作(需要重新定义列表)
    print(df)
    print(df[-5:])
    df=df.drop([420]) #删除某一行数据操作(需要重新定义列表)
    print(df)
    df.columns=["名称","类型","城市","地区","街道","评分","评价人数","日常人数"] #改变表格的各列名称
    print(df)
    print(type(df.index))
    print(df.columns)
    print(df["名称"])
    #提取某几行某几列数据的三种方法(df.loc[;,;,iloc[;,;],df[[,,][:])
    print(df[["名称","类型"]][:5]) #提取某几列某几行
    print(df.iloc[0:5,0:3]) #提取某行某列(行在前,列在后)
    print(df.loc[1:40,"类型":"评分"])
    print(df[["名称","评分","城市"]][0:400:20]) #列在前,行在后

    #列的相关操作
    df["序号"]=range(1,len(df)+1) #增加列的操作
    print(df[:5])
    df=df.drop("序号",axis=1) #删减列时采用.drop函数,此时drop(x,axis=1)x表示列的名称,axis=1表示删除的是列,不写axis表示它为0,删除的默认是行
    print(df)
    print(df.loc[[1,2,3,5,10],["类型","评分"]]) #标准形式提取表格中的数据

    #条件选择的数据操作
    print(df[df.评分>4.5])
    print(df[(df.评分>4.5 )& (df.类型=="浪漫情侣")])
    print(df[((df.类型=="香港")|(df.日常人数>1000))&(df.评分>4.5)])

    #数据缺失值及其异常值的处理
    print(df.isnull())
    print(df[df["评分"].isnull()]) #缺失值的判断和输出
    #对于缺失值的填充
    print(df[df["评价人数"].isnull()]) #首先判断是否有残缺值
    df["评价人数"].fillna(np.mean(df["评价人数"]),inplace=True) #缺失值的填充和实时更新inplace=1
    print(df)
    print(len(df[df["评价人数"].isnull()]))
    print(len(df))
    print(len(df.dropna()))
    df.dropna(inplace=True)
    print(len(df))
    print(len(df[df["日常人数"]%1!=0])) #对于异常值的判断和处理
    df=df[(df["日常人数"]%1==0)&(df["日常人数"]>0)] #根据异常值的条件进行实时更新
    print(df)

    
    

    
    








  • 相关阅读:
    无线安全
    下载安装Emacs和基本配置--待更新中
    uv-pv-vv的区别
    tesseract安装及问题处理
    POJ 2187 Beauty Contest【凸包周长】
    POJ 1113 Wall【凸包周长】
    POJ 2187 Beauty Contest【旋转卡壳求凸包直径】
    POJ 2031 Building a Space Station【经典最小生成树】
    URAL 1181 Cutting a Painted Polygon【递归+分治】
    POJ 1845-Sumdiv【经典数学题目---求因子和】
  • 原文地址:https://www.cnblogs.com/Yanjy-OnlyOne/p/11201273.html
Copyright © 2020-2023  润新知