首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python数据分析-pandas详细教程二

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函数的应用、表连接、缺失值处理等。

学习与分享,关注小号

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180304G0GLE200?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券