Python Pandas使用ix无法获得一致的结果

时间:2014-01-29 01:07:38

标签: python pandas

我无法弄清楚为什么我会为同样的请求获得不同的答案变量类型。

数据:

df = pandas.DataFrame({'group1': ['a','a','a','b','b','b'],
                       'group2': ['c','c','d','d','d','e'],
                       'value1': [1.1,2,3,4,5,6],
                       'value2': [7.1,8,9,10,11,12]})

    group1  group2  value1  value2
0   a   c   1.1     7.1
1   a   c   2.0     8.0
2   a   d   3.0     9.0
3   b   d   4.0     10.0
4   b   d   5.0     11.0
5   b   e   6.0     12.0

请求#1

In [30]:  df.ix[2]

缺货[30]:

group1    a
group2    d
value1    3
value2    9
Name: 2, dtype: object

请求#2

In [35]:    `df.ix[(df['value1']==3)]`

Out[35]:
    group1  group2  value1  value2
2   a   d   3   9

因为我为这两个操作获得了不同类型的变量,所以我不能使用相同的过程来处理结果。我做错了吗?

1 个答案:

答案 0 :(得分:1)

Pandas有多种方法可以根据您的需要进行索引编制。请参阅文档here

使用标量值(如2)进行选择将删除结果的维度(例如,您将获得一个系列)。要返回一个框架,请传递一个列表([2]是一个单个元素列表)

按位置选择(第3个元素,元素编号从0开始)

In [9]: df.iloc[[2]]
Out[9]: 
  group1 group2  value1  value2
2      a      d       3       9

[1 rows x 4 columns]

选择标签为2

的行
In [10]: df.ix[[2]]
Out[10]: 
  group1 group2  value1  value2
2      a      d       3       9

[1 rows x 4 columns]

一个布尔索引器,对于索引为2的行产生True(请注意您使用的parens 在这个示例中非常丰富,df.ix[(df['value1']==3)]完全相同(在这些示例中.ix.loc)。

In [11]: df.loc[df['value1']==3]
Out[11]: 
  group1 group2  value1  value2
2      a      d       3       9

[1 rows x 4 columns]

与上面相同,使用查询语法

In [12]: df.query('value1==3')
Out[12]: 
  group1 group2  value1  value2
2      a      d       3       9

[1 rows x 4 columns]