一起学习,一起成长
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,dtype
bject
7.索引字段ix(行)
注意,返回的Series拥有原DataFrame相同的索引,且其name属性也已经被相应地设置好了。行也可以通过位置或名称的方式进行获取,比如用索引字段ix:
In[44]
rame2.ix[one]
Out[44]
/p>
year
stateOhio
pop1.5
debtNaN
Name
ne,dtype
bject
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数据模型的重要组成部分。
「亲,如果笔记对您有帮助,收藏的同时,记得给点个赞、加个