Pandas(数据分析处理库)代码大全写在前面:1.读取.csv格式的数据文件2. DataFrame类型的变量拥有的操作

写在前面:

Pandas简介:Python Data Analysis Library(数据分析处理库) 或 pandas 是基于NumPy
的一种工具,该工具是为了解决数据分析任务而创建的。

pandas的数据结构:

Series: ** 一维 **
数组,与Numpy中的一维ndarray类似。二者与Python基本的数据结构List也很相近,其区别是:List中的元素可以是不同的数据类型,而Array和Series中则只允许存储相同的数据类型,这样可以更有效的使用内存,提高运算效率。

Time- Series:以时间为索引的Series。

DataFrame: ** 二维 ** 的表格型数据结构,可以理解为Series的容器。

Panel : 三维 的数组,可以理解为DataFrame的容器。

本文主要介绍DateFrame数据结构。

本文中用到的数据集为food_info.csv,若有需要,在留言区留言即可获得。

本文只是介绍pandas的基本使用,若要详细深入学习,请参阅 [ pandas官方文档 ](http://pandas.pydata.org/pandas-
docs/stable/) 。

1.读取.csv格式的数据文件

food_info.csv文件的局部预览图:

每一行:代表一种食品所包含的各种营养成分

    #导包
    import pandas
    
    #读取数据文件,并将数据赋值成一个变量
    food_info = pandas.read_csv("food_info.csv")   
    
    #将数据赋值成一个变量后,打印此变量的类型为Dataframe
    print(type(food_info))  
    
    #打印文件中数据的类型。object类型即string类型            
    print(food_info.dtypes) 
    
    #若对pandas中的某函数不了解,可以通过help()来查看             
    print(help(pandas.read_csv))     ```

运行结果:

![](https://images2018.cnblogs.com/blog/1365108/201804/1365108-20180405174000673-701567437.png)

补充:DataFrame结构中的dtype类型

object————for string values

int————for integer values

float————for float values

datetime————for time values

bool————for Boolean values

#  2. DataFrame类型的变量拥有的操作

在第一步中,将要处理的数据文件读取出来并赋值给一个变量food_info,此变量的类型为DataFrame类型,下边将会对这个变量进行操作。

##  2.1 .head()函数:读取并显示数据的前几行

###  A. 无参数:缺省默认显示前5行数据

​```code
    #缺省默认显示前5行数据
    food_info.head()```

运行结果:

![](https://images2018.cnblogs.com/blog/1365108/201804/1365108-20180405180755279-1293036279.png)

###  B. 有参数: .head(a)函数如果添加参数a,则显示数据的前a行

​```code
    #读取并显示数据的前3行
    food_info.head(3)      ```

运行结果:

![](https://images2018.cnblogs.com/blog/1365108/201804/1365108-20180405181230965-417643980.png)

##  2.2 .tail()函数:读取并显示数据的后几行

###  A. 无参数:.缺省默认显示后5行数据

​```code
    #缺省默认显示后5行数据
    food_info.tail()      ```

运行结果:

![](https://images2018.cnblogs.com/blog/1365108/201804/1365108-20180405202608882-1273517295.png)

###  B. 有参数:.tail(a)函数如果添加参数a,则显示数据的末尾a行

​```code
    #读取并显示数据的后3行
    food_info.tail(3)        ```

运行结果:

![](https://images2018.cnblogs.com/blog/1365108/201804/1365108-20180405202805383-1895632272.png)

有print与没有print的区别

没有实质性的差别,只是显示的形式不同而已。

​```code
    print(food_info.tail(3))      #有print和没有print显示形式有些不同   
[/code]

运行结果:

![](https://images2018.cnblogs.com/blog/1365108/201804/1365108-20180405203946272-580732784.png)

##  2.3 .columns函数:读取并显示列名

​```code
    #读取并显示列名
    food_info.columns                   
    #print(food_info.columns)  
[/code]

运行结果:

![](https://images2018.cnblogs.com/blog/1365108/201804/1365108-20180405203827106-1759933492.png)

##  2.4 .shape函数:返回数据文件的行数和列数

​```code
    #读取并显示文件的行数和列数
    food_info.shape     ```

运行结果:

![](https://images2018.cnblogs.com/blog/1365108/201804/1365108-20180405204550192-732237841.png)

##  2.5 .loc[ ]函数:读取文件中  特定行位置  的数据

在Pandas中取文件特定位置的数据不像python和numpy中那样直接通过index来调

###  A. .loc[a]函数,参数a:取第a+1行的数据(index是从0开始的)

​```code
    #读取并显示特定行的数据
    #返回第一行的文件数据
    food_info.loc[0]  
[/code]

运行结果:

![](https://images2018.cnblogs.com/blog/1365108/201804/1365108-20180405205905530-1271629694.png)

注意:当index的值超过了文件的样本个数,会报错(越界)

​```code
    #返回第8889行的文件数据
    food_info.loc[8888]    ```

运行结果:

![](https://images2018.cnblogs.com/blog/1365108/201804/1365108-20180405210146871-1624613790.png)

###  B. .loc[a:b]函数,参数a:b :取从第a行到第b行的数据

​```code
    #返回数据文件的3——6行数据
    food_info.loc[3:6]     ```

运行结果:

![](https://images2018.cnblogs.com/blog/1365108/201804/1365108-20180405212605129-746601523.png)

###  C. .loc[[a,b,c]]函数,参数a,b,c :取第a,b,c三行的数据

注意:这里的参数是 ** 元组  ** 形式 [a, b, c]

​```code
    #返回数据文件的3,5,7行数据
    food_info.loc[[3,5,7]]    ```

运行结果:

![](https://images2018.cnblogs.com/blog/1365108/201804/1365108-20180405212704393-180079946.png)

##  2.6 读取文件中  特定列位置  的数据

###  A. 取一列数据

​```code
    #读取并显示列名为“NDB_No”所在的那一列
    ndb_col = food_info["NDB_No"]       
    print(ndb_col)
    
    #也可以将列名“NDB_No”赋值给变量,然后通过变量来返回数据
    col_name = "NDB_No"
    ndb_col = food_info[col_name]
    print(ndb_col)
[/code]

运行结果:

![](https://images2018.cnblogs.com/blog/1365108/201804/1365108-20180405220739048-1882110397.png)

###  B. 取 **特定几列数据**

想要取特定的几列,则只需要将想要取得列的列名弄到一起,组成一个list就可以了

​```code
    #将要取得两列的列名放到一个list里,并赋给变量
    columns = ["Zinc_(mg)","Copper_(mg)"] 
    #通过变量取得两列的数据    
    zinc_coop = food_info[columns]            
    print(zinc_coop)                       
    
    #完全可以不依靠中间变量,意义相同
    #food_info[["Zinc_(mg)","Copper_(mg)"]]
[/code]

运行结果:

![](https://images2018.cnblogs.com/blog/1365108/201804/1365108-20180405221747102-763274447.png)

##  2.7 抽取列名中以(g)为单位的列的数据

在 .csv数据中,有些数据是以克(g)为单位,有些数据则是以毫克(mg)为单位

需求:抽取出全部以(g)为单位的列的数据

**数据的列表头的局部预览图如下:**

![](https://images2018.cnblogs.com/blog/1365108/201804/1365108-20180406114228909-2117135587.png)

思路:

1.首先读取列名(.columns函数);

2.然后将取得的列名转换成list格式(tolist()函数);

3.再对list遍历,找出以
“(g)”结尾的列名(.endwith()函数),添加到一个空list(gram_columns)里面(.append()函数)

​```code
    import pandas
    
    #目的:想要看一下数据中有哪些列是以克(g)为单位的
    
    food_info = pandas.read_csv("food_info.csv")    #读取.csv的数据文件
    col_names = food_info.columns.tolist()          #返回DataFrame类型变量的列名,并将其存储为list格式
    
    gram_columns = []                               #定义list的变量,准备存放以(g)为单位的列名
    for c in col_names:                             #用for循环对为一个列名进行遍历
        if c.endswith("(g)"):                       #如果列名是以“(g)”结尾的,则将其放入到gram_columns的列表中
            gram_columns.append(c)
    
    gram_df = food_info[gram_columns]               #gram_df 是所有以(gram_columns)为列名的列的数据。(即抽出这么几行)
    print(gram_df.head(3))                          #打印所有以“(g)”为单位的列名对应的数据的前三行
[/code]

运行结果:

![](https://images2018.cnblogs.com/blog/1365108/201804/1365108-20180406114830313-657763315.png)

##  2.9 数据之间的“+”“-”“×”“÷”操作

在Pandas中,不但各列数据可以“+”“-”“×”“÷”任何数,两列或者多列数据之间也可以进行“+”“-”“×”“÷”。

注意:要求维度一样,当维度一样的时候,对应位置的数据进行运算。

需求:将数据中的两列数据进行乘法,然后把得到的结果作为数据的一个新的指标加入到原来的数据中,使原本数据的列数据增加一。

​```code
    #导包
    import pandas
    
    #读取文件
    food_info = pandas.read_csv("food_info.csv")
     
    #将数据中"Water_(g)"和"Energ_Kcal"这两列的数据做乘法运算(对应位置的数据相乘)
    #将结果赋值给变量water_energy                   
    water_energy = food_info["Water_(g)"]*food_info["Energ_Kcal"]         
                                                                         
    print("原数据的shape值:",food_info.shape) 
    
    #将乘法得到的新的数据作为样本的一个指标加入到food_info变量中,命名为:"Water_energy"
    food_info["Water_energy"] = water_energy 
                                 
    print("现在的shape值:", food_info.shape)
    
    #将三列数据组成一个list赋值给变量columns
    columns = ["Water_(g)","Energ_Kcal","Water_energy"] 
    #将list作为food_info的参数                  
    water_energy_togher = food_info[columns]                              
    water_energy_togher
    
    #以上的三行代码,可以合并为下边的一句
    #注意三个列名组成的是一个list元组形式,然后传到food_info[]中
    #print(food_info[["Water_(g)","Energ_Kcal","Water_energy"]])
[/code]

运行结果:

![](https://images2018.cnblogs.com/blog/1365108/201804/1365108-20180406161615869-295291594.png)

##  2.10 .max()函数:求某一列数据的最大值

需求:求某一列数据的最大值

​```code
    #求某一列数据的最大值
    #首先定位到某一列,然后使用.max()函数,求出最大值
    max_calories = food_info["Energ_Kcal"].max()
    print("max = ",max_calories)
[/code]

运行结果:

![](https://images2018.cnblogs.com/blog/1365108/201804/1365108-20180406162937258-215170534.png)

##

##  2.11 .sort_values()函数:排序

​```code
    #排序操作
    #sort_values():对数据进行排序
    #参数:首先要给一个列名(即对此列数据进行排序)
    #inpalce = True:排序后生成另外新的DataFrame数据,而不是原来的那个。
    #inpalce = False:排序后生成新的DataFrame数据替换原来的那个
    #sort_values():默认的排序方式为从小到大排序,如果想要从大到小,则设置ascending = False
    #对于缺省值的样本,panda会返回NaN,并将这数据排在最后
    
    food_info.sort_values("Sodium_(mg)",inplace = True)
    print(food_info["Sodium_(mg)"])
    
    food_info.sort_values("Sodium_(mg)",inplace = True, ascending = False)
    print(food_info["Sodium_(mg)"])
[/code]

运行结果:(部分展示)

![](https://images2018.cnblogs.com/blog/1365108/201804/1365108-20180406165207528-700488496.png)

**更多AI资源请关注公众号:大胡子的AI**

![](https://img-
blog.csdn.net/20180918212207721?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTU0OTczNA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

**欢迎各位AI爱好者加入群聊交流学习:882345565(内有大量免费资源哦!)**

![](https://img-
blog.csdn.net/20180918212248207?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTU0OTczNA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

版权声明:本文为博主原创文章,未经博主允许不得转载。如要转载请与本人联系


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210608151750993.gif)

版权声明:本文为qq_27851579原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。