小丸子踏入python之路:python_day05(数据分析处理库Pandas)
Pandas概述:
Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
关于数据处理的一个库,只有把数据处理成合适的样子才有利于以后的建模。
Pandas库的安装:
在anaconda中已经安装了这个库,不用自己安装。
如何查看anaconda中安装的库呢?
打开 anaconda prompt,输入conda list后回车即可。
如果真的需要安装,则直接输入:pip install (tensorflow)即可
Pandas的基本操作:
1.读取.csv格式的数据文件
在处理数据之前,先将数据读进来,pandas中提供了读取.csv文件的函数:.read_csv()
本操作处理的文件,文件名为:food_info.csv
当代码和数据在同一目录时,函数.read_csv("food_info.csv")的参数可直接输入文件名,
当代码与数据不在同一文件夹中,则应在函数.read_csv("D:\softwares\food_info.csv")的参数中输入数据的绝对路径.
与NumPy中的核心结构ndarray类似,在Pandas中也有其核心结构为:DataFrame
DataFrame结构中的dtype类型
object————for string values
int————for integer values
float————for float values
datetime————for time values
bool————for Boolean values
可以用以下代码查看:
print(food_info.dtypes) #打印文件中数据的类型。object类型即string类型
food_info.csv文件的局部预览图:
1 import pandas
2 food_info = pandas.read_csv("food_info.csv") #读取数据文件, 并将数据赋值成一个变量
3 print(type(food_info)) #将数据赋值成一个变量后,打印此变量的类型为Dataframe
4 print(food_info.dtypes) #打印文件中数据的类型。object类型即string类型
5 print(help(pandas.read_csv)) #若对pandas中的某函数不了解,可以通过help()来查看
运行结果:
2. DataFrame类型的变量拥有的操作
在第一步中,将要处理的数据文件读取出来并赋值给一个变量food_info,此变量的类型为DataFrame类型,下边将会对这个变量进行操作。
2.1 .head()函数,显示读取出来的头几行数据
无参数
.head()函数如果不加参数,则默认显示数据的前五行。
food_info.head() #head()没有给定参数,默认显示前5行
运行结果:
有参数
.head(a)函数如果添加参数a,则显示数据的前a行。
food_info.head(3) #当head(a)指定参数a,则显示先a行
运行结果:
2.2 .tail()函数,显示读取出来的尾几行数据
无参数
.tail()函数如果不加参数,则默认显示数据的末尾五行。
food_info.tail() #tail()没有参数时,显示尾五行
运行结果:
有参数
.tail(a)函数如果添加参数a,则显示数据的末尾a行。
food_info.tail(3) #tail(a) 有参数a时,显示尾a行
运行结果:
有print与没有print的区别
没有实质性的差别,只是显示的形式不同而已。
print(food_info.tail(3)) #有print和没有print显示形式有些不同
运行结果:
3、 .columns函数显示文件的列名
food_info.columns #显示文件的列名
#print(food_info.columns) #与不带print一样
运行结果:
4. .shape函数,返回数据文件的规模(即行数和列数)
food_info.shape #返回数据文件的规模,即行数和列数(样本数与属性数)
运行结果:
5. .loc[ ]函数,取数据文件中特定行位置的数据
- 在Pandas中取文件特定位置的数据不像python和numpy中那样直接通过index来调,通常会使用.loc[a]函数来调,参数a等于几就是取第a+1行的数据。(index是从0开始的)
food_info.loc[0] #返回第一行的文件数据
#print(food_info.loc[0])
运行结果:
注意:
当index的值超过了文件的样本个数,会报错。所以注意索引的大小。
food_info.loc[8888] #返回第8889行的文件数据
运行结果:
- 通常会使用.loc[a:b]函数来调,参数a:b 相当于取从第a行到第b行的数据。
food_info.loc[3:6] #返回数据文件的3——6行数据
运行结果:
- 通常会使用.loc[[a,b,c]]函数来调,参数a,b,c 相当于去取第a,b,c三行的数据。
food_info.loc[[3,5,7]] #返回数据文件的3,5,7行数据
运行结果:
6. 取数据文件中特定列位置的数据
- 想要一列一列的取数据,应该运用什么方法呢?
数据的每一列都有一个列名,当对 .read_csv()不指定参数的时候,会默认数据的第一行是列名。则可以通过第一行的列名,来拿到这一列。
ndb_col = food_info["NDB_No"] #打印列名为“NDB_No”所在的那一列
print(ndb_col)
#也可以将列名“NDB_No”赋值给变量,然后通过变量来返回数据
col_name = "NDB_No"
ndb_col = food_info[col_name]
print(ndb_col)
运行结果:
- 想要对特定几列取数据,应该运用什么方法呢?
想要取特定的几列,则只需要将想要取得列的列名弄到一起,组成一个list就可以了
columns = ["Zinc_(mg)","Copper_(mg)"] #将要取得两列的列名放到一个list里,并赋给变量
zinc_coop = food_info[columns] #通过变量取得两列的数据
zinc_coop #显示
#要不要print只是打印出来的形式不太相同
#print(zinc_coop)
#完全可以不依靠中间变量,意义相同
#food_info[["Zinc_(mg)","Copper_(mg)"]]
运行结果:
7.抽取列名中以(g)为单位的列的数据
在 .csv数据中,有的是以克(g)为单位,有些是以毫克(mg)为单位,现在的目标是:抽取出全部以(g)为单位的列的数据。
数据的列表头基本情况展示如下:
思路:先去列名,用.columns函数,然后将取得的列名存放成list格式。
再通过对list操作,来匹配出以 “(g)”结尾的列名,append到food_info中。
import pandas
#目的:想要看一下数据中有哪些列是以克(g)为单位的
food_info = pandas.read_csv("food_info.csv") #读取.csv的数据文件
#print(food_info.columns) #返回DataFrame类型变量的列名
#print(food_info.head(2))
col_names = food_info.columns.tolist() #返回DataFrame类型变量的列名,并将其存储为list格式显示。
print("col_names = ", col_names)
print("-----------------------------------------------")
gram_columns = [] #定义list的变量,准备存放以(g)为单位的列名
for c in col_names: #用for循环对为一个列名进行遍历
if c.endswith("(g)"): #如果列名是以“(g)”结尾的,则将其放入到gram_columns的列表中
gram_columns.append(c)
print("gram_columns = ", gram_columns)
print("------------------------------------------------")
gram_df = food_info[gram_columns] #gram_df 是所有以(gram_columns)为列名的列的数据。(即抽出这么几行)
print(gram_df.head(3)) #打印所有以“(g)”为单位的列名对应的数据的前三行
运行结果:
8.在Pandas中单列数据的“+”“-”“×”“÷”操作
需求:在 .csv的文件中,有的列的数据是以毫克(mg)为单位的,现在想将其转化成为以克(g)为单位的数据。
思路:用food_info["列名"]的方式调出某一列的数据,然后将其 / 1000,便把以毫克(mg)为单位的转化成了以克(g)为单位的了。嘻嘻
print(food_info["Iron_(mg)"]) #显示以mg为单位的,Iron_(mg)的数据
div_1000 = food_info["Iron_(mg)"]/1000 #将其数据 ÷1000,换算为 g
print(div_1000) #打印换算后的数据。
运行结果:
9.在Pandas中多列数据之间的“+”“-”“×”“÷”操作
在Pandas中,不但各列数据可以“+”“-”“×”“÷”任何数,两列或者多列数据之间也可以进行“+”“-”“×”“÷”。
要求维度一样,当维度一样的时候,对应位置的数据进行运算。
下边要介绍的是将数据中的两列数据进行乘法,然后把得到的结果作为数据的一个新的指标加入到原来的数据中,使原本数据的列数据增加一。
import pandas
#如若数据的维度相同,即行列数相同,则可将数据进行“+”“-”“×”“÷”操作。
#并可将操作过后得到的列添加在原来数据中,成为一个新的指标,此时的数据的.shape的值将会多加了一列。
food_info = pandas.read_csv("food_info.csv") #读取.csv的数据文件
water_energy = food_info["Water_(g)"]*food_info["Energ_Kcal"] #将数据中"Water_(g)"和"Energ_Kcal"这两列的数据做乘法运算,
#并将结果赋值给变量water_energy
print("原数据的shape值:",food_info.shape)
food_info["Water_energy"] = water_energy #将乘法得到的新的数据作为样本的一个指标加入到food_info变量中,命名为:"Water_energy"
print("现在的shape值:", food_info.shape)
columns = ["Water_(g)","Energ_Kcal","Water_energy"] #将三列数据组成一个list,然后赋值给变量columns
water_energy_togher = food_info[columns] #将list作为food_info的参数,并显示
water_energy_togher
#当然了,以上的三行代码,可以合并为下边的一句,注意三个列名组成的是一个list,然后传到food_info[]中
#print(food_info[["Water_(g)","Energ_Kcal","Water_energy"]])
运行结果:
10.用.max()函数求某一列数据的最大值
要求:求某一列数据的最大值
思路:先定位到这一列,然后用.max()函数直接求出
#求某一列数据的一个最大值
#首先定位到某一列,然后使用.max()函数,求出最大值
max_calories = food_info["Energ_Kcal"].max()
print("max = ",max_calories)
运行结果:
11.用sort_values()对Pandas中的数据进行排序
对Pandas的列进行一个排序
使用sort_values()函数对数据进行一个排序,
参数:首先要给一个列名(即对此列数据进行排序)
inpalce = True,表示排序后生成一个新的DataFrame数据,而不是原来的那个。 = False表示原来的那个
而且sort_values()默认的排序方式就是从小到大排序,如果想要从大到小,则设置ascending = False
对于缺省值的样本,panda会返回NaN,并将这数据排在最后
#对Pandas的列进行一个排序
#使用sort_values()函数对数据进行一个排序,参数:首先要给一个列名(即对此列数据进行排序)
#inpalce = True,表示排序后生成一个新的DataFrame数据,而不是原来的那个。 = False表示原来的那个
#而且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)"])
运行结果:(部分展示)