DataFrame数据选择方法
DataFrame在某些方面像二维化或结构化的数组,在某些方面又像一个共享索引的若干Series对象构成的字典。所以,选择DataFrame中的数据可以从上面两个角度出发。
将DataFrame看作字典
“`python
import numpy as np
import pandas as pd
创建一个DataFrame对象
area = pd.Series({‘California’: 423967, ‘Texas’: 695662,
‘New York’: 141297, ‘Florida’: 170312,
‘Illinois’: 149995})
pop = pd.Series({‘California’: 38332521, ‘Texas’: 26448193,
‘New York’: 19651127, ‘Florida’: 19552860,
‘Illinois’: 12882135})
data = pd.DataFrame({‘area’:area, ‘pop’:pop})
把data看作是字典,字典的键为列名,值是每列对应的Series对象、
这里两个Series分别构成DataFrame的一列,可以通过对列名的字典形式的取值获取数据
data[‘area’]
输出如下:
California 423967
Texas 695662
New York 141297
Florida 170312
Illinois 149995
Name: area, dtype: int64
“`
#同样也可以将每一列看作是DataFrame的属性,使用data的属性形式可以直接访问数据
data.area
#输出如下:
California 423967
Texas 695662
New York 141297
Florida 170312
Illinois 149995
Name: area, dtype: int64
将DataFrame对象看作是二维数组
#对data可以直接查看其values属性
data.values
#输出如下:
array([[ 423967, 38332521],
[ 695662, 26448193],
[ 141297, 19651127],
[ 170312, 19552860],
[ 149995, 12882135]])
#如果仅仅是获得数据,而不要求保留DataFrame的标签,那么可以在取得value属性后,进行和numpy数组一样的操作(获取切片、花哨索引、bool索引、掩码等数据子集
#如果需要保留DataFrame的标签,推荐使用pd.loc和pd.iloc
#pd.loc为显式索引,即使用标签进行索引
data.loc['California':'Florida',:'pop']
#输出如下:
area pop
California 423967 38332521
Texas 695662 26448193
New York 141297 19651127
Florida 170312 19552860
#如果只需要对index方向上进行索引,可以在data直接操作,对多个标签用切片会选中行进行筛选
data['California':'Florida']
#结果如下
area pop
California 423967 38332521
Texas 695662 26448193
New York 141297 19651127
Florida 170312 19552860
#需要注意的是,如果在data上对单个标签取值会对DataFrame的列进行筛选
data['pop']
#结果如下
California 38332521
Texas 26448193
New York 19651127
Florida 19552860
Illinois 12882135
Name: pop, dtype: int64
#那么何为隐式搜索呢?隐式搜索相当于使用numpy二维数组取值方式的同时保留DataFrame的标签,最大的好处就是:在数据量庞大的时候,可以快速的对DataFrame进行切片操作
data.iloc[:3,:2]
#结果如下:
area pop
California 423967 38332521
Texas 695662 26448193
New York 141297 19651127