python pandas dataframe 行列选择,切片操作

python pandas dataframe 行列选择,切片操作

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']})
# data type of columns
print df.dtypes
# indexes
print df.index
# return pandas.Index
print df.columns
# each row, return array[array]
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
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]]#.loc仅支持列名操作
KeyError: 'None of [[2, 3]] are in the [columns]'
print df.loc[[2, 3]]#.loc可以不加列名,则是行选择
    sex   tip  total_bill
2  Male  3.50       23.68
3  Male  3.31       23.68
print df.iloc[1:3]#.iloc可以不加第几列,则是行选择
    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']]
# print df[1:2, ['total_bill', 'tip']]  # TypeError: unhashable type
    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[]只能进行行选择,或列选择,不能同时进行列选择,列选择只能是列名。

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值