DataFrame作为pandas最常用的数据结构,类似于数据库中的表;DataFrame既有行索引,也有列索引,当其没有指定索引时,会自动创建一个0到N(N为数据的长度)的整数型索引。每个Series看作DataFrame的一个列。下面主要介绍DataFrame的创建、增、删、改、查等SQL操作。
一、创建DataFrame
DataFrame的创建有三种方式,示例如下:
In [1]:importnumpyasnp
In [2]:importpandasaspd
#通过列表创建DataFrame
In [3]:df1=pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]])
In [4]:df1
Out[4]:
0 1 2
0 1 2 3
1 4 5 6
2 7 8 9
#通过字典创建DataFrame
In [5]:dic={'price':[4500,6000,8000,12000],'state':['ok','ok','good','bad'],'year':[2013,2014,2015,2016]}
In [6]:df2=pd.DataFrame(dic)
In [7]:df2
Out[7]:
price state year
0 4500ok2013
1 6000ok2014
2 8000good2015
3 12000bad2016
#通过二维数组创建DataFrame
In [8]:arr=np.arange(12).reshape(4,3)#创建二维数组
In [9]:arr
Out[9]:array([[,1,2],
[3,4,5],
[6,7,8],
[9,10,11]])
In [10]:df3=pd.DataFrame(arr,columns=['a','b','c'])
In [11]:df3
Out[11]:
a b c
0 0 1 2
1 3 4 5
2 6 7 8
3 9 10 11
二、查看数据
在Python中通过索引的方式获取数据,有两种方式:loc、iloc,其中loc是通过索引名称获取数据,iloc是通过索引位置获取数据。推荐使用loc函数获取数据,个人觉得iloc应用场景较少,示例如下:
In [1]:importpandasaspd
#读取数据
In [2]:info_data=pd.read_csv('D:/info_data.csv',sep=',',encoding='utf-8')
#查询数据的前5行
In [3]:info_data.head()
Out[3]:
Name Sex Age Fare
Kelly male34 7.83
1Wilkes female20 7.00
2Hirvonen male12 9.69
3Connolly male27 8.66
4Caldwell female22 12.29
#查询数据的末尾5行
In [4]:info_data.tail()
Out[4]:
Name Sex Age Fare
5Davies male14 9.23
6Jones female50 7.63
7Howard male26 29.00
8Keane female18 7.23
9Ryerson male30 24.15
#查询数据的行索引
In [5]:info_data.index
Out[5]:RangeIndex(start=,stop=10,step=1)
#查询数据的列索引
In [6]:info_data.columns
Out[6]:Index(['Name','Sex','Age','Fare'],dtype='object')
#查询数据的值
In [7]:info_data.values
Out[7]:array([['Kelly','male',34,7.83],
['Wilkes','female',20,7.0],
['Hirvonen','male',12,9.69],
['Connolly','male',27,8.66],
['Caldwell','female',22,12.29],
['Davies','male',14,9.23],
['Jones','female',50,7.63],
['Howard','male',26,29.0],
['Keane','female',18,7.23],
['Ryerson','male',30,24.15]],dtype=object)
#查询指定的行
In [8]:info_data.loc[:3,:]
Out[8]:
Name Sex Age Fare
Kelly male34 7.83
1Wilkes female20 7.00
2Hirvonen male12 9.69
3Connolly male27 8.66
#查询指定的列
In [9]:info_data.loc[:,['Name','Age','Fare']].head()
Out[9]:
Name Age Fare
Kelly34 7.83
1Wilkes20 7.00
2Hirvonen12 9.69
3Connolly27 8.66
4Caldwell22 12.29
#查询所有男生的信息
In [10]:info_data.loc[info_data['Sex']=='male',:]
Out[10]:
Name Sex Age Fare
Kelly male34 7.83
2Hirvonen male12 9.69
3Connolly male27 8.66
5Davies male14 9.23
7Howard male26 29.00
9Ryerson male30 24.15
#查询所有20岁以上的男生信息
In [11]:info_data.loc[(info_data['Sex']=='male')&(info_data['Age']>20),:]
Out[11]:
Name Sex Age Fare
Kelly male34 7.83
3Connolly male27 8.66
7Howard male26 29.00
9Ryerson male30 24.15
#查询所有20岁以上的男生姓名和费用
In [12]:info_data.loc[(info_data['Sex']=='male')&(info_data['Age']>20),['Name','Fare']]
Out[12]:
Name Fare
Kelly7.83
3Connolly8.66
7Howard29.00
9Ryerson24.15
以上的查询逻辑非常简单,需要特别注意的是,如果多条件查询,必须在&(且)、|(或)的两端条件用圆括号括起来。
三、增加新行、列
当其DataFrame中需要添加新的行或者列,可以通过如下方式实现:
In [1]:importpandasaspd
#通过字典创建DataFrame
In [2]:student=pd.DataFrame({'Name':['Bob','Mary'],'Age':[10,14]})
In [3]:student
Out[3]:
Age Name
0 10Bob
1 14Mary
In [4]:df=pd.DataFrame({'Name':['David','Kelly'],'Age':[9,12]})
In [5]:df
Out[5]:
Age Name
0 9David
1 12Kelly
#通过append函数增加新行
In [6]:student=student.append(df)
In [7]:student
Out[7]:
Age Name
0 10Bob
1 14Mary
0 9David
1 12Kelly
#通过赋值的方式增加新列
In [8]:student['Score']=[76,89,80,95]
In [9]:student
Out[9]:
Age Name Score
0 10Bob76
1 14Mary89
0 9David80
1 12Kelly95
四、删除指定的行、列
1、删除指定的行有两种方式:drop函数删除、通过布尔索引反选的方式删除行数据,具体示例如下:
In [1]:importpandasaspd
In [2]:student=pd.DataFrame({'Name':['Bob','Mary','David','Kelly','kate'],'Age':[10,14,9,12,10],'Score':[76,89,80,95,90]})
In [3]:student
Out[3]:
Age Name Score
0 10Bob76
1 14Mary89
2 9David80
3 12Kelly95
4 10kate90
#通过drop函数删除行数据
In [4]:student.drop([,2,4])#删除第1、3、5行数据
Out[4]:
Age Name Score
1 14Mary89
3 12Kelly95
#通过布尔索引删除10岁以下的学生
In [5]:student[student['Age']>10]
Out[5]:
Age Name Score
1 14Mary89
3 12Kelly95
2、删除指定的列,通过drop函数实现,示例如下:
In [6]:student.drop(['Age'],axis=1)
Out[6]:
Name Score
Bob76
1Mary89
2David80
3Kelly95
4kate90
五、修改DataFrame记录值
如果发现表中的某些数据错误了,我们可以通过布尔索引定位到行、列的具体位置,再通过赋值的方式进行修改。
例如,我们发现学生中的姓名为Bob的学生成绩错了,应该为100,修改示例如下:
In [1]:importpandasaspd
In [2]:student=pd.DataFrame({'Name':['Bob','Mary','David','Kelly','kate'],'Score':[76,60,87,95,90]})
In [3]:student
Out[3]:
Name Score
Bob76
1Mary60
2David87
3Kelly95
4kate90
#修改DataFrame记录值
In [4]:student.loc[student['Name']=='Bob','Score']=100
In [5]:student
Out[5]:
Name Score
Bob100
1Mary60
2David87
3Kelly95
4kate90
此次DataFrame结构就分享到这,下期将继续分享DataFrame函数的应用、表连接、缺失值处理等。
学习与分享,关注小号
领取专属 10元无门槛券
私享最新 技术干货