赞
踩
Dataframe是pandas的模块最具代表的数据结果,其作用之强大溢于言表,下面我们分几个最常用的说一下.
import pandas as pd
我们先说loc,基本上loc会了,iloc知道原理后自然就会了, 他们俩是一致的;
Dataframe的定义和初始话,直接上几个例子更直接:
---------------------------------------------------------------1----------------------------------------------------------------------------------------------------------------
source=[[1,2,3],[4,5,6],[7,8,9]]
col_arr=[‘a’,'b','c']
row_arr = ['aa','bb','cc']
df = pd.Dataframe(data=source,columns=col_arr,index=row_arr)
a | b | c | |
aa | 1 | 2 | 3 |
bb | 4 | 5 | 6 |
cc | 7 | 8 | 9 |
---------------------------------------------------------------2----------------------------------------------------------------
df = pd.Dataframe(data=source,columns=col_arr)
如果没有设置行索引或者列所以,Dataframe将会自动用0,1,2,3...作为自动的行列索引
a | b | c | |
0 | 1 | 2 | 3 |
1 | 4 | 5 | 6 |
2 | 7 | 8 | 9 |
---------------------------------------------------------------3----------------------------------------------------------------
df = pd.Dataframe(data=source)
0 | 1 | 2 | |
0 | 1 | 2 | 3 |
1 | 4 | 5 | 6 |
2 | 7 | 8 | 9 |
Dataframe的data参数,有一下几个类型:元组,列表,字典
当是一维元组的时候:df = pd.Dataframe(data=(1,2,3))
当是一维列表的时候:df = pd.Dataframe(data=[1,2,3])
当是二维元组的时候:df = pd.Dataframe(data=((1,2,3)))
当是二维列表的时候:df = pd.Dataframe(data=[[1,2,3]])
可以看出当都是一维的时候,参数data是元组还是列表,他俩构成的Dataframe都是一致的,可以混用
但是当都是二维的时候,元组表现出来的还是一列,但是列表确实一行,这就是区别,知道区别了,自己慢慢体会下,((1,2,3),(4,5,6)) 和[[1,2,3],[4,5,6]]分别可以构成什么样的矩阵呢?大家可以自己试一下。
让大家纳闷的是,结果并不是按照上面能推理出来的,二维的元组和列表构建成的Dataframe的矩阵看起来又是一样的。记住,知道怎么用就OK了,没必要知道为什么。-_-
pd.DataFrame(data={'a':[1,2,3],'b':[4,5,6],'c':[7,8,9]})
对于这种{'a':xx,'b':xx}字段作为data的参数,字典的key就是列索引名,如果没有指定index的话,行所以就是默认的0,1,2,3...
提醒一下,这个时候就不能指定列索引(columns)了,否则会error
还有一些list和Dictionary,元组混合作为参数的,大家有兴趣可以自己试一下
初始化讲完了,我们来看下具体用法。
Dataframe可以理解为是二维矩阵,或者说是一个二维数组,loc最大的作用就是标记了这个二维矩阵行索引和列索引,因为可以更好的对这个二维数字进行分析和切割;
loc的定义是 loc[rows_index,columns_index]
如果想取矩阵中某一个元素, df.loc['aa','b'] #返回 2
我们列举了一下几个功能:拿上面初始化第一个例子说一下
a | b | c | |
aa | 1 | 2 | 3 |
bb | 4 | 5 | 6 |
cc | 7 | 8 | 9 |
取一行数据
- df.loc['aa'] #返回的是series类型的数据集
- df.loc['aa',] #返回的是series类型的数据集
- df.loc['aa',:] #返回的是series类型的数据集
- df.loc[['aa']] #返回的是Dataframe类型的数据集
- df.loc[['aa'],] #返回的是Dataframe类型的数据集
- df.loc[['aa'],:] #返回的是Dataframe类型的数据集
看code找规律,我想这个很简单,总结一下就是
1. loc只有第一个参数,第二个参数是空,或者: 表示是取一行的数据,第一个参数就是行索引的索引名
2. 第一个参数是单索引名,返回时series类型的数据集,当时用[]list集合时,返回的是Dataframe的数据集
同样的方法我们取一列:
- df.loc[:,'a'] #返回的是series类型的数据集
- df.loc[:,['a']] #返回的是Dataframe类型的数据集
同样找到一些规律:
1. 第一个参数一定要有:,表示是所有的行
2. 第二个参数可以是一个单索引名,返回时series类型的数据集, 当时用[]list集合时,返回的是Dataframe的数据集
单行单列都知道怎么取,那多行多列更简单了,无非就是用[]list,多加行或者列的索引,因为是list作为参数,取出来的是Dataframe类型的数据集
例如:
- df.loc[['aa','bb']] #返回的是aa,bb两行组合Dataframe类型的数据集
- df.loc[['aa','bb'],:] #同上
- df.loc[,['a','b']] #返回的是a,a两列组合Dataframe类型的数据集
- df.loc[:,['a','b']] #同上
说完loc,大致有点了解,那么iloc就容易多了
我们知道loc是通过用户自定义行或者系统自定义列索引来进行对矩阵做分析和处理的,那iloc则不是,他是通过0,1,2,3...数字的形式
- df = pd.Dataframe(data=[[1,2,3],[4,5,6],[7,8,9]],columns=['a','b','c'],index=['aa','bb','cc'])
- a b c
- aa 1 2 3
- bb 4 5 6
- cc 7 8 9
-
- 取一行数据:
- #loc 是用自定义的索引取数据
- pf.loc['a']
- pf.loc[['a']]
- #loc 是0,1,2,3...来取索引,即使你定义df的时候定义了行(index)和列(colnmns) 也不会用,仍然用 0,1,2,3...当作索引值
- pf.iloc[0]
- pf.iloc[[0]]
Dataframe的支持点很多,具体还是要实体操作一下才知道他的强大,本人第一次写东西记录一下,有错误的地方希望给与指出,一起进步,谢谢-__-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。