Python无法使用ix获得一致的结果
我不明白为什么我会得到一个不同的答案变量类型,看起来像是同一个请求 数据:Python无法使用ix获得一致的结果,python,pandas,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,
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
因为这两个操作的变量类型不同,所以不能使用相同的过程来处理结果。我做错什么了吗?熊猫有几种索引方法,具体取决于你想要什么。见文件 使用标量值(如2)进行选择将删除结果的维度(例如,您将得到一个系列)。要返回帧,请传递列表(
[2]
是单个元素列表)
按位置选择(第三个元素,元素编号从0开始)
选择标签为2的行
In [10]: df.ix[[2]]
Out[10]:
group1 group2 value1 value2
2 a d 3 9
[1 rows x 4 columns]
一个布尔索引器,为索引为2的行生成True(请注意,您使用的参数
在这里的示例中,df.ix[(df['value1']==3)]
做了完全相同的事情(在这些示例中,.ix
和.loc
)
同上,使用查询语法
In [12]: df.query('value1==3')
Out[12]:
group1 group2 value1 value2
2 a d 3 9
[1 rows x 4 columns]
可能值得一提的是这样做的动机:如果当只有一个True时,
df.ix[(df['value1']==3)]
会自动压缩,那么您必须编写代码来分支,以确定Trues的数量是零(返回数据帧?)、一(返回序列)还是多个(再次返回数据帧)。保留返回一个序列的访问方法和返回一个数据帧的访问方法之间的区别要简单得多,即使帧的长度为1。你的意思是,它不会自动压缩。这是一个布尔索引器,所以它对行进行索引,你得到一个帧(仅供参考,Paren在这里不做任何事情).?我是说,如果它自动挤压,坏事就会发生。啊……好吧……你认为OP“认为”它被挤压了吗?啊,这是我对OP为什么惊讶于两个结果是一样的最好猜测。只需调用结果的squeze()
方法:df.ix[2]。squeze(),df.ix[(df['value1'==3)]。suqeeze()
如果您确保只选择一行,请注意挤压()的使用。谢谢。
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]