数据结构论坛

注册

 

发新话题 回复该主题

什么是Pandas的DataFrame [复制链接]

1#
一起学习,一起成长

1.什么是DataFrame

DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引,它可以被看做由series组成的字典(共用同一个索引)

2.DateFrame特点

DataFrame中面向行和面向列的操作基本是平衡的。

DataFrame中的数据是以一个或多个两维块存放的(而不是列表、字典或别的一维数据结构)。

3.创建DataFrame

最常用的一种是直接传入一个由等长列表或NumPy数组组成的字典:

In[33]ata={state:[Ohio,Ohio,Ohio,Nevada,Nevada],year:[,,,,],pop:[1.5,1.7,3.6,2.4,2.9]}

In[34]rame=DataFrame(data)

#结果DataFrame会自动加上索引(跟Series一样),且全部列会被有序排列:

In[35]rame

Out[35]/p>

popstateyear

01.5Ohio

11.7Ohio

23.6Ohio

32.4Nevada

42.9Nevada

4.指定列顺序

#使用clolumns指定列顺序

In[36]ataFrame(data,columns=[year,state,pop])

Out[36]/p>

yearstatepop

0Ohio1.5

1Ohio1.7

2Ohio3.6

3Nevada2.4

4Nevada2.9

5.NA值

跟Series一样,如果传入的列在数据中找不到,就会产生NA值:

In[37]ataFrame(data,columns=[year,state,pop,debt],index=[one,two,three,four,five])

Out[37]/p>

yearstatepopdebt

oneOhio1.5NaN

twoOhio1.7NaN

threeOhio3.6NaN

fourNevada2.4NaN

fiveNevada2.9NaN

6.类似字典(或属性)标记

通过类似字典标记的方式或属性的方式,可以将DataFrame的列获取为一个Series:

In[39]rame[state]#或frame.state

Out[39]/p>

0Ohio

1Ohio

2Ohio

3Nevada

4Nevada

Name:state,dtypebject

7.索引字段ix(行)

注意,返回的Series拥有原DataFrame相同的索引,且其name属性也已经被相应地设置好了。行也可以通过位置或名称的方式进行获取,比如用索引字段ix:

In[44]rame2.ix[one]

Out[44]/p>

year

stateOhio

pop1.5

debtNaN

Namene,dtypebject

8.通过赋值修改列

列可以通过赋值的方式进行修改。例如,可以给那个空的‘debt’列赋上一个标量值或一组值:

In[45]rame2[debt]=16.5#或frame2.debt

In[46]:frame2

Out[46]:

yearstatepopdebt

oneOhio1..5

twoOhio1..5

threeOhio3..5

fourNevada2..5

fiveNevada2..5

In[50]:frame2.debt=np.arange(5.)

In[51]:frame2

Out[51]:

yearstatepopdebt

oneOhio1.50.0

twoOhio1.71.0

threeOhio3.62.0

fourNevada2.43.0

fiveNevada2.94.0

将列表或数组赋值给某个列时,其长度必须跟DataFrame的长度相匹配。如果赋值的是一个Series,就会精确匹配DataFrame的索引,所有的空位都将被填上缺失值:

In[52]:val=Series([-1.2,-1.5,-1.7],index=[two,four,five])

In[53]:frame2[debt]=val

In[54]:frame2

Out[54]:

yearstatepopdebt

oneOhio1.5NaN

twoOhio1.7-1.2

threeOhio3.6NaN

fourNevada2.4-1.5

fiveNevada2.9-1.7

9.关键字del删除列

为不存在的列赋值会创建出一个新列。关键字del用于删除列:

In[55]:frame2[eastern]=frame2.state==Ohio

In[56]:frame2

Out[56]:

yearstatepopdebteastern

oneOhio1.5NaNTrue

twoOhio1.7-1.2True

threeOhio3.6NaNTrue

fourNevada2.4-1.5False

fiveNevada2.9-1.7False

In[57]elframe2[eastern]

In[58]:frame2.columns

Out[58]:Index([year,state,pop,debt],dtype=object)

警告:通过索引方式返回的列只是相应数据的视图而已,并不是副本。因此,对返回的Series所做的任何就地修改全都会反映到源DataFrame上。通过Series的copy方法即可显示地赋值列。

10.嵌套字典

嵌套字典(也就是字典的字典):

In[62]:pop={Nevada:{:2.4,:2.9},Ohio:{:1.5,:17,:3.6}}

#如果将它传给DataFrame,它就会被解释为:外层字典的键作为列,内层键则作为行索引:

In[63]:frame3=DataFrame(pop)

In[64]:frame3

Out[64]:

NevadaOhio

NaN1.5

2..0

2.93.6

内层字典的键会被合并、排序以形成最终的索引。如果显式指定了索引,则不会这样:

In[66]ataFrame(pop,index=[,,])

Out[66]:

NevadaOhio

2..0

2.93.6

NaNNaN

由Series组成的字典差不多也是一样的用法:

In[68]:pdata={Ohio:frame3[Ohio][:-1],Nevada:frame3[Nevada][:2]}

In[69]ataFrame(pdata)

Out[69]:

NevadaOhio

NaN1.5

2..0

11.转置

In[65]:frame3.T

Out[65]:

NevadaNaN2.42.9

Ohio1..03.6

12.索引对象

Pandas的索引对象负责管理轴标签和其他元数据(比如轴名称等)。

Index对象是不可修改的(immutable),因此用户不能对其进行修改。

不可修改性非常重要,因为这样才能使Index对象在多个数据结构之间安全共享。

注意:虽然大部分用户都不需要知道太多关于Index对象的细节,但它们确实是pandas数据模型的重要组成部分。

「亲,如果笔记对您有帮助,收藏的同时,记得给点个赞、加个

分享 转发
TOP
发新话题 回复该主题