Python数据分析(一)-Pandas「1」

    技术2022-07-11  110

    Pandas是什么?

    Pandas是一个强大的分析结构化数据的工具集;它的使用基础是Numpy(提供高性能的矩阵运算);用于数据挖掘和数据分析,同时也提供数据清洗功能

    Pandas利器

    DataFrame DataFrame是Pandas中的一个表格型的数据结构,包含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型等),DataFrame即有行索引也有列索引,可以被看做是由Series组成的字典。 对DataFrame最直接的理解就是它是一个Excel文件。Series 它是一种类似于一维数组的对象,是由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据也可产生简单的Series对象。DataFram和Series的关系 DataFrame的一列就是Series,Series转为dataframe可以采用函数to_frame.

    Pandas使用demo

    所需资源:College.csv资源

    import pandas as pd import numpy as np from IPython.display import display # (对jupyter行数的一个设置)默认情况下,一个cell的显示行列存在数量限制。数据集过大时,中间部分数据会以省略号显示。如果想增减或不做数量限制,可通过设置pd.options.display.max_rows/max_columns以达到目的。 pd.options.display.max_columns = 50 # 直接将文件放于同一个路径下,若其他路径,需写相对路径 college = pd.read_csv('College.csv') # 默认展示行数为5行 college.head()

    输出结果: 对header的基本设置

    import pandas as pd import numpy as np # 设置header为中文.注意:若设置names要设置完整,不然则是从后往前设置部分。 #对于iris.csv直接从网上获取下载就好,有好多资源 iris_data=pd.read_csv('iris.csv',header=0, names=["花萼长度","花萼宽度","花瓣长度","花瓣宽度","类别"], encoding='gbk'); # 设置显示最大行数,为5行。其实head()默认显示行数也是5 pd.set_option("display.max_rows",5) iris_data.head() # 想为college中的header设置中文名,但是因为字段太多,只设置了两个,看结果则明白,其设置是从后往前设置的。 college_data=pd.read_csv('college.csv',header=0,names=["大学","排名"], encoding='gbk') # pd.set_option("display.max_rows",5) college_data.head()

    # 显示所有的字段名。 columns=college.columns columns //输出结果: Index(['Name', 'Private', 'Apps', 'Accept', 'Enroll', 'Top10perc', 'Top25perc', 'F.Undergrad', 'P.Undergrad', 'Outstate', 'Room.Board', 'Books', 'Personal', 'PhD', 'Terminal', 'S.F.Ratio', 'perc.alumni', 'Expend', 'Grad.Rate'], dtype='object')

    iloc和loc的区别

    loc loc是select by label(name) loc函数是选择dataframe中那一行的index == k的iloc iloc是select by position iloc函数是选择dataframe中第position行 # 选择数据子集 # loc是select by position,loc函数是选择dataframe中第position行,可以无任何顺序 s=college.iloc[:,[4,8,2]].head() # loc是select by label(name),loc函数是选择dataframe中那一行的index == k的,可以无任何顺序 s1=college.loc[:,['PhD','Books','Enroll']] print(s.head()) # print(s1.head()),最后的一次输出可以不用print s1.head()

    利用loc实现基本赋值

    正常返回结果: 花萼长度 花萼宽度 花瓣长度 花瓣宽度 类别 1 5.1 3.5 1.4 0.2 setosa 2 4.9 3.0 1.4 0.2 setosa 3 4.7 3.2 1.3 0.2 setosa 4 4.6 3.1 1.5 0.2 setosa 5 5.0 3.6 1.4 0.2 setosa

    通过loc可以对某一个值,某一行或者某一列的数据进行重新赋值

    # 建立数据副本,以便多次修改 DataFrame=iris_data[:5].copy() # 修改第0行类别标签列的数据 DataFrame.loc[1,"类别"]="新类别名" print(DataFrame) # 建立数据副本,以便多次修改 DataFrame = iris_data[:5].copy() # 修改第1行的数据 DataFrame.loc[1]="新数据" print(DataFrame) # 建立数据副本,以便多次修改 DataFrame = iris_data[:5].copy() # 修改第1列的数据 DataFrame.loc[:,"花萼长度"]=10 print(DataFrame) //输出结果(一一对应) 花萼长度 花萼宽度 花瓣长度 花瓣宽度 类别 1 5.1 3.5 1.4 0.2 新类别名 2 4.9 3.0 1.4 0.2 setosa 3 4.7 3.2 1.3 0.2 setosa 4 4.6 3.1 1.5 0.2 setosa 5 5.0 3.6 1.4 0.2 setosa 花萼长度 花萼宽度 花瓣长度 花瓣宽度 类别 1 新数据 新数据 新数据 新数据 新数据 2 4.9 3 1.4 0.2 setosa 3 4.7 3.2 1.3 0.2 setosa 4 4.6 3.1 1.5 0.2 setosa 5 5 3.6 1.4 0.2 setosa 花萼长度 花萼宽度 花瓣长度 花瓣宽度 类别 1 10 3.5 1.4 0.2 setosa 2 10 3.0 1.4 0.2 setosa 3 10 3.2 1.3 0.2 setosa 4 10 3.1 1.5 0.2 setosa 5 10 3.6 1.4 0.2 setosa

    iloc获取部分数据,左闭右开原则

    正常返回前五行的结果: 花萼长度 花萼宽度 花瓣长度 花瓣宽度 类别 1 5.1 3.5 1.4 0.2 setosa 2 4.9 3.0 1.4 0.2 setosa 3 4.7 3.2 1.3 0.2 setosa 4 4.6 3.1 1.5 0.2 setosa 5 5.0 3.6 1.4 0.2 setosa

    # iloc中括号,是左闭右开 1:3则是第一行和第二行,不包括第三行 # 获取第一行,第二行的第一列数值,会打印出索引号 DataFrame.iloc[1:3,1] # 获取第一行,第二行的数据,第一列第二列的数据 DataFrame.iloc[1:3,1:3] # 前三行前三列 DataFrame.iloc[:3,:3] # 0,1,3行的第一列,和最开始的获取是一样的,无顺序之分,写哪列获取哪列 DataFrame.iloc[[0,1,3],1] # 获取1,3,4行,切记:使用TrueFalse方式,必须把所有列都获取完整,不想要的都用False表示,不然则会报错: # Item wrong length 4 instead of 5.(本来有5列,结果告诉你就表示了4列,不完整,哈哈哈) DataFrame.iloc[[True, False, True,True,False]] //输出结果(一一对应) 2 3.0 3 3.2 Name: 花萼宽度, dtype: float64 花萼宽度 花瓣长度 2 3.0 1.4 3 3.2 1.3 花萼长度 花萼宽度 花瓣长度 1 10 3.5 1.4 2 10 3.0 1.4 3 10 3.2 1.3 1 3.5 2 3.0 4 3.1 Name: 花萼宽度, dtype: float64 花萼长度 花萼宽度 花瓣长度 花瓣宽度 类别 1 10 3.5 1.4 0.2 setosa 3 10 3.2 1.3 0.2 setosa 4 10 3.1 1.5 0.2 setosa

    loc实现条件检索

    正常返回前五行的结果: 花萼长度 花萼宽度 花瓣长度 花瓣宽度 类别 1 5.1 3.5 1.4 0.2 setosa 2 4.9 3.0 1.4 0.2 setosa 3 4.7 3.2 1.3 0.2 setosa 4 4.6 3.1 1.5 0.2 setosa 5 5.0 3.6 1.4 0.2 setosa

    # 筛选:花萼长度一列的值都大于4 s1=DataFrame.loc[DataFrame["花萼长度"]>4] s1 # 筛选:花萼长度大于等于5.0且花瓣长度大于等于1.4的 s2=DataFrame.loc[(DataFrame["花萼长度"]>=5.0) & (DataFrame["花瓣长度"]>=1.4)] s2 //输出结果(一一对应) 全部返回,因为花萼长度无小于4的 花萼长度 花萼宽度 花瓣长度 花瓣宽度 类别 1 5.1 3.5 1.4 0.2 setosa 5 5.0 3.6 1.4 0.2 setosa

    PS:具体关于条件检索相关,可见下篇博客

    set_index()

    2020年07月01日17:50:55第一次理解:

    # index.tolist直接获取索引,然后整合成list index=college.iloc[[60,99,3]].index.tolist() print(index) # college=college.set_index("Name")或者加上drop=True,此两种写法只能执行一次,再次执行会提示None of ['Name'] are in the columns # set_index 设置索引 college=college.set_index("Name",drop=False) index2=college.iloc[[60,99,3]].index.tolist() print(index2) //第一遍执行结果: [60, 99, 3] ['Bowdoin College', 'Centenary College of Louisiana', 'Agnes Scott College'] //第二遍执行结果: ['Bowdoin College', 'Centenary College of Louisiana', 'Agnes Scott College'] ['Bowdoin College', 'Centenary College of Louisiana', 'Agnes Scott College'] 主要原因则是set_index将Name设置成了索引值,所以当第二次执行的时候,则也会显示Name的信息。
    Processed: 0.010, SQL: 9