我无法弄清楚为什么我会为同样的请求获得不同的答案变量类型。
数据:
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
因为我为这两个操作获得了不同类型的变量,所以我不能使用相同的过程来处理结果。我做错了吗?
答案 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]