Pandas:数据选择
介绍
pandas主要有2种数据选择选择格式:基于label的.loc
与基于位置的.iloc
。
.loc
主要基于label,当所选择的数据查找不到时,.loc
将抛出KeyError。.loc
在选择时,格式为loc
[行,列],行标签在前,列标签在后。
.loc
支持4种方式选择数据:
- 单一的标签,比如’a’或’5’;注意此处的’5’是索引中的数字标签,而不是位置;
- 标签数组[‘a’,’b’,’c’];
- 切片:’a’:’f’。注意此处逻辑与python切片有差异,它会将开始的a与结束的f都包含进去;
- boolean数组;
.iloc
是基于位置进行查找(从0到length-1),当所选择的数据查找不到时,.iloc
将抛出IndexErrro。.iloc
在选择时,格式为iloc
[行,列],行位置在前,列位置在后。
.iloc
支持四种方式选择数据:
- 单一的位置数字,比如5;
- 数字数组:[1,3,5]
- 切片:比如1:7。注意此处逻辑与python切片有差异,它会将开始的a与结束的f都包含进去;
- boolean数组
注意事项:
对比以下两种取值方法:
1.df['B']['C']
2.df_g.loc[:,['B','C']]
方法一会导致返回的数据是一份copy,你对它进行操作,比如赋值:df['B']['C']=0
,可能不会对dataframe造成影响,并会提示:SettingWithCopyWarning。所以推荐使用方法二进行取值。
具体的官方文档解释,见此处
示例
以下示例均在ipython中操作:
df= DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',
'foo', 'bar', 'foo', 'foo'],
'B' : ['one', 'one', 'two', 'three',
'two', 'two', 'one', 'three'],
'C' : np.random.randn(8), 'D' : np.random.randn(8)})
df
输出:
A | B | C | D | |
---|---|---|---|---|
0 | foo | one | 0.149304 | 0.242362 |
1 | bar | one | 0.665781 | 0.382197 |
2 | foo | two | 0.266864 | -0.846936 |
3 | bar | three | -1.456214 | 0.600248 |
4 | foo | two | -1.137853 | -1.007400 |
5 | bar | two | 2.312738 | -0.528008 |
6 | foo | one | -1.069947 | 0.420484 |
7 | foo | three | 0.786922 | -0.956687 |
输入:
df.loc[3]
输出:
A bar
B three
C -1.456214
D 0.6002484
Name: 3, dtype: object
输入:
df.loc[0:2,('A','B')]
输出
A | B | |
---|---|---|
0 | foo | one |
1 | bar | one |
2 | foo | two |
输入:
df.iloc[:1,3:]
输出:
D | |
---|---|
0 | 0.242362 |
输入:
df.iloc[2]>0.5
输出:
A True
B True
C False
D False
Name: 2, dtype: bool
输入:
#使用boolean数组,将结果为True的label返回。
df.loc[1:3,df.iloc[2]>0.5]
输出
A | B | |
---|---|---|
1 | bar | one |
2 | foo | two |
3 | bar | three |
- 上一篇 杂感
- 下一篇 微信公众号的RSS订阅解决方案