SQL中的select是根据列的名称来选取;Pandas则更为灵活,不但可根据列名称选取,还可以根据列所在的position(数字,在第几行第几列,注意pandas行列的position是从0开始)选取。相关函数如下:
1)loc,基于列label,可选取特定行(根据行index);
2)iloc,基于行/列的position;
3)at,根据指定行index及列label,快速定位DataFrame的元素;
4)iat,与at类似,不同的是根据position来定位的;
5)ix,为loc与iloc的混合体,既支持label也支持position;
实例
import pandas as pd
import numpy as np
df = pd.DataFrame({'total_bill': [16.99, 10.34, 23.68, 23.68, 24.59],
'tip': [1.01, 1.66, 3.50, 3.31, 3.61],
'sex': ['Female', 'Male', 'Male', 'Male', 'Female']})
print df.dtypes
print df.index
print df.columns
print df.values
print df
sex object
tip float64
total_bill float64
dtype: object
RangeIndex(start=0, stop=5, step=1)
Index([u'sex', u'tip', u'total_bill'], dtype='object')
[['Female' 1.01 16.99]
['Male' 1.66 10.34]
['Male' 3.5 23.68]
['Male' 3.31 23.68]
['Female' 3.61 24.59]]
sex tip total_bill
0 Female 1.01 16.99
1 Male 1.66 10.34
2 Male 3.50 23.68
3 Male 3.31 23.68
4 Female 3.61 24.59
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
print df.loc[1:3, ['total_bill', 'tip']]
print df.loc[1:3, 'tip': 'total_bill']
print df.iloc[1:3, [1, 2]]
print df.iloc[1:3, 1: 3]
total_bill tip
1 10.34 1.66
2 23.68 3.50
3 23.68 3.31
tip total_bill
1 1.66 10.34
2 3.50 23.68
3 3.31 23.68
tip total_bill
1 1.66 10.34
2 3.50 23.68
tip total_bill
1 1.66 10.34
2 3.50 23.68
错误的表示:
print df.loc[1:3, [2, 3]]
KeyError: 'None of [[2, 3]] are in the [columns]'
print df.loc[[2, 3]]
sex tip total_bill
2 Male 3.50 23.68
3 Male 3.31 23.68
print df.iloc[1:3]
sex tip total_bill
1 Male 1.66 10.34
2 Male 3.50 23.68
print df.iloc[1:3, 'tip': 'total_bill']
TypeError: cannot do slice indexing on <class 'pandas.indexes.base.Index'> with these indexers [tip] of <type 'str'>
print df.at[3, 'tip']
print df.iat[3, 1]
print df.ix[1:3, [1, 2]]
print df.ix[1:3, ['total_bill', 'tip']]
3.31
3.31
tip total_bill
1 1.66 10.34
2 3.50 23.68
3 3.31 23.68
total_bill tip
1 10.34 1.66
2 23.68 3.50
3 23.68 3.31
print df.ix[[1, 2]]
sex tip total_bill
1 Male 1.66 10.34
2 Male 3.50 23.68
print df[1: 3]
print df[['total_bill', 'tip']]
sex tip total_bill
1 Male 1.66 10.34
2 Male 3.50 23.68
total_bill tip
0 16.99 1.01
1 10.34 1.66
2 23.68 3.50
3 23.68 3.31
4 24.59 3.61
print df[1:3,1:2]
TypeError: unhashable type
总结
1).loc,.iloc,.ix,只加第一个参数如.loc([1,2]),.iloc([2:3]),.ix[2]…则进行的是行选择
2).loc,.at,选列是只能是列名,不能是position
3).iloc,.iat,选列是只能是position,不能是列名
4)df[]只能进行行选择,或列选择,不能同时进行列选择,列选择只能是列名。