DataFrame对象
DataFrame这种列表式数据结构跟excel表相似,其设计初衷是将Series的使用场景由一维扩展到多维,DataFrame由按一定顺序排列的多列数据组成,各列的数据类型可以有所不同.
DataFrame对象有两个索引数组(index和columns),第一个数组与行相关,它与Series的索引数组极为相似,每个索引值都跟所在的一行相关联,第二个数组包含一系列列标签(每个值相当于列名),DataFrame可以理解为一个由Series组成的字典,其中每一列的名称作为字典的键,形成DataFrame的列的Series作为字典的值,每个Series的所有元素映射到叫Index的标签数组中.
- 定义DataFrame对象
构造函数如下:
def __init__(self, data=None, index=None, columns=None, dtype=None,
copy=False):
使用字典构造DataFrame对象,字典的键为columns的值,字典的值为columns的值对应的Series对象.
>>> data = {"color": ["blue", "green", "yellow", "red", "white"], "object": ["ball", "pen", "pencil", "paper", "mug"], "price": [1.2, 1.0, 0.6, 0.9, 1.7]}
>>> frame = pd.DataFrame(data)
>>> print(frame)
color object price
0 blue ball 1.2
1 green pen 1.0
2 yellow pencil 0.6
3 red paper 0.9
4 white mug 1.7
如果用来创建DataFrame的dict中存在你不需要的数据,你可以指定columns参数来构造DataFrame对象,新建的DataFrame各列顺序与你指定的列顺序一样.
>>> frame2 = pd.DataFrame(data, columns=["color", "price"])
>>> print(frame2)
color price
0 blue 1.2
1 green 1.0
2 yellow 0.6
3 red 0.9
4 white 1.7
也可以指定index参数构造DataFrame对象,如果没有指定,默认是从0开始依次递增的数组.
>>> frame2 = pd.DataFrame(data, index=["one", "two", "three", "four", "five"])
>>> print(frame2)
color object price
one blue ball 1.2
two green pen 1.0
three yellow pencil 0.6
four red paper 0.9
five white mug 1.7
- 使用数据矩阵构造DataFrame对象
>>> frame3 = pd.DataFrame(np.arange(16).reshape((4,4)), index=["red", "blue", "yellow", "white"], columns=["ball", "pen", "pencil", "paper"])
>>> print(frame3)
>>> print(frame3)
ball pen pencil paper
red 0 1 2 3
blue 4 5 6 7
yellow 8 9 10 11
white 12 13 14 15
- 选取元素
>>> print(frame3.columns)
Index(['ball', 'pen', 'pencil', 'paper'], dtype='object')
>>> print(type(frame3.columns))
>>> print(frame3.index)
Index(['red', 'blue', 'yellow', 'white'], dtype='object')
>>> print(type(frame3.index))
>>> print(frame3.values)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
>>> print(type(frame3.values)) --- 是一个numpy的ndarray数组
- 获取一列数据
>>> print(frame3["paper"]) --- 得到一个Series对象
red 3
blue 7
yellow 11
white 15
Name: paper, dtype: int32
>>> print(type(frame3["paper"])
>>> print(frame3.paper) --- 使用列名称作为属性获取一列
red 3
blue 7
yellow 11
white 15
Name: paper, dtype: int32
- 获取一行(使用DataFrame对象的ix属性)
>>> print(frame3.ix[2]) --- 返回一个Series对象,index由列名组成,values为每个列名对应的值
ball 8
pen 9
pencil 10
paper 11
Name: yellow, dtype: int32
>>> print(type(frame3.ix[2]))
- 用一个数组指定多个索引值选取多行,返回一个DataFrame对象
>>>print(frame3.ix[[2,4]]) --- 两个参数表示选取行
ball pen pencil paper
blue 4 5 6 7
white 12 13 14 15
>>>print(type(frame3.ix[[2,4]]))
- 直接使用索引选取多行数据
>>> print(frame3[1:3])
ball pen pencil paper
blue 4 5 6 7
yellow 8 9 10 11
>>> print(frame3[1])
直接报错,不能选取一行
>>> print(frame3[1:2]) --- 选取一行
ball pen pencil paper
blue 4 5 6 7
- 获取存储在DataFrame中的一个数据
>>>print(frame3["paper"][2])
11
- 赋值