对于生成的dDataFrame,下一步进行的是对他的基本操作,增、减、改、查。
一. 数据选取
从已有的DataFrame中取出其中一列或几列,并对其进行操作。
Pandas取出DataFrame的列有两种方式,两个方式没有好与坏之分,还是看个人喜欢用哪个
#-*- coding:utf-8 -*-
import pandas as pd
df = pd.DataFrame({'goods':['coke cola', 'eggplant','condom'], 'quantity':[12,3,1], 'price':[20,12,80]})
df['goods'] #选择df的goods这一列
df.goods #同上,是选择列的第二种方法 需要注意的是,第一种方法看似像是一种列表形式,但是如果像是如下方式书写代码会报错
df['goods','quantity'] #会报错,不要妄想通过这种方式获取多列。 上方的形式会引发一个KeyError的错误。如果想通过第一种形式获取多列,正确的形式如下
df[['goods','quantity']] 将多列的列名按照一个list的形式传入,就可以获取一个DataFrame的多列。
二. 数据筛选
往往选取出几个DataFrame的列并不能满足筛选,DataFrame的筛选的形式比较特殊,对列进行筛选时用到的是之前所讲的第二种选取列的形式,有点像是把列名视为一个DataFrame的属性。
#-*- coding:utf-8 -*-
import pandas as pd
df = pd.DataFrame({'goods':['coke cola', 'eggplant','condom'], 'quantity':[12,3,1], 'price':[20,12,80]})
print df[df.goods =='eggplant'] # goods price quantity
# 1 eggplant 12 3 上面代码的意思是选取DataFrame中,goods列的值为'eggplant‘的所有行。DataFrame中也支持多条件筛选,与Python的判断语句相同,and、or、not 和 xor分别代表 和、或、非、抑或。也可以用符号代替 &、|、~、^。每个判断条件要用圆括号括起来,否则会报错
df[(df.goods =='eggplant') & (df.quantity == 12)] 选取df中 goods列值为 eggplant且 对应的 quantity值为12的所有列。
在筛选数据时候也可以使用loc和iloc函数实现子集的选取,意思并不是说上方的筛选语句不对,亲测同样很好用,而且代码简单了点。loc和iloc进行数据筛选的格式如下:
df = df.loc[df.goods=='eggplant', :].loc[]相当于是把想要筛选的列通过 ':'全部选出来。loc方法同样支持多条件筛选。
df = df.loc[(df.goods =='eggplant') & (df.quantity == 12), :] loc形式的多条件筛选,条件与条件之间同样要使用括号分割开。这两行loc方法筛选的结果与之前没用loc方法写的代码效果是一样的,格式规范而言肯定是有loc的更容易让人理解。但是如果只是给自己写脚本完全可以用前一种,必要时候做个注释即可。
条件筛选的另一