- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在 Pandas 中对 DataFrame 进行子集化时,我注意到 loc
和 ix
之间存在一个奇怪的区别。
import pandas as pd
# Create a dataframe
df = pd.DataFrame({'id':[10,9,5,6,8], 'x1':[10.0,12.3,13.4,11.9,7.6], 'x2':['a','a','b','c','c']})
df.set_index('id', inplace=True)
df
x1 x2
id
10 10.0 a
9 12.3 a
5 13.4 b
6 11.9 c
8 7.6 c
df.loc[[10, 9, 7]] # 7 does not exist in the index so a NaN row is returned
df.loc[[7]] # KeyError: 'None of [[7]] are in the [index]'
df.ix[[7]] # 7 does not exist in the index so a NaN row is returned
为什么 df.loc[[7]]
在 df.ix[[7]]
返回带有 NaN 的行时抛出错误?这是一个错误吗?如果不是,为什么 loc
和 ix
是这样设计的?
(注意我在 Python 3.5.1 上使用 Pandas 0.17.1)
最佳答案
正如@shanmuga 所说,这是(至少对于 loc
)预期和记录的行为,而不是错误。
关于 loc
/selection by label 的文档,给出了这方面的规则(http://pandas.pydata.org/pandas-docs/stable/indexing.html#selection-by-label):
At least 1 of the labels for which you ask, must be in the index or a KeyError will be raised!
这意味着如果该标签不在索引中,则将 loc
与单个标签(例如 df.loc[[7]]
)一起使用会引发错误,但是当它与标签列表(例如 df.loc[[7,8,9]]
)一起使用时,如果索引中至少有一个标签,则不会引发错误。
对于 ix
我不太确定,而且我认为这没有明确记录。但在任何情况下,ix
都更加宽松并且有很多边缘情况(回退到整数位置等),并且是一个兔子洞。但一般来说,ix
将始终返回一个使用提供的标签索引的结果(因此不会像 loc
那样检查标签是否在索引中),除非 它回落到整数位置索引。
在大多数情况下,建议使用 loc
/iloc
关于python - loc 和 ix 之间的意外差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34259637/
有多个关于堆栈溢出的问题比较 loc、iloc 和 ix,例如 this one ,以及多个谈论速度差异的问题,例如 this one 。似乎一致认为 .ix 更快,但它是 deprecated .
显然不可能转换 WhereEnumerableIterator至 IEnumerable public interface IX public class X1 : IX public class X
为什么下面会导致编译错误? interface IX {} interface IY {} class XY : IX, IY {} void Foo() where T : IX, IY {
例如, import pandas as pd import numpy as np df1 = pd.DataFrame({'frames':np.arange(3), 'r':np.repeat(
在 C# 中,如果 A 实现 IX 并且 B 继承自 A ,是否必然遵循 B 实现 IX?如果是,是因为 LSP 吗?之间有什么区别吗: 1. Interface IX; Class A : IX;
考虑 Pandas 数据框 df = DataFrame({'somedata': [13,24,54]}, index=[1,1,2]) somedata 1 13 1 24 2
在pandas iloc vs ix vs loc explanation, how are they different? ,它提到:ix 通常会尝试表现得像 loc 但如果标签不在索引中,则回落到
一开始自学Python的numpy、pandas时候,索引和切片把我都给弄晕了,特别是numpy的切片索引、布尔索引和花式索引,简直就是大乱斗。但是最近由于版本的问题,从之前的Python2.7改用
抱歉,标题措辞不好,但我什至不知道如何正确提问。 我该如何转动它? instPublicIP :: Instance -> Maybe Text instPublicIP inst = inst
我想运行一段代码来检查其中发生了什么,但我无法执行它,有一条消息说 .ix 已弃用。 离群值 = 4 #离群值 for k in np.arange(0,3,1): wAvg = sum(df
Python 版本:2.7.6 NumPy 版本:1.10.2 Pandas :0.17.1 我知道 .ix 现在已被弃用,但我在遗留系统上工作并看到 .ix 的这种行为,我很困惑 # Native
因此,我尝试使用此处“删除不符合所需条件的行”下的方法,仅在我的数据框中包含 B 列值小于 C 列值的行:https://www.quora.com/How-should-I-delete-rows-
我有一个 pandas 数据框形式的 csv 文件,具有以下索引 Time stamp SOG Altitude 2015-03-11T08:49:53.00
我想知道是否有一种方法可以使 .ix 具有多个条件。更具体地说,我想做的是改变这一点: In [66]: df_test Out[66]: A B C
有人可以向我解释这种行为吗? import pandas as pd dates = pd.date_range('1/1/2000', periods=8) df = pd.DataFrame(np
鉴于 pandas 0.20.0 和 deprecation of .ix 的更新,我想知道使用剩余的 .loc 和 .iloc 获得相同结果的最有效方法是什么。我刚刚回答了this question
我在开发一些加载一组用户指定的共享对象的软件。我想向我们的“加载器”组件添加一些代码,该组件可以查询每个指定的共享对象并找出用于构建/链接该共享对象的编译器和编译器版本。 在过去,我已经能够使用“st
我只知道一个有效,另一个无效。 上下文: 我有一个数据结构F其中包含 Data.Map.Map k S到另一个数据结构 S .我的目标是建立一个 Lens给出 F和 k将描述 S 中的一个字段. 困难
假设我有一些相当简单的数据类型 Person有几个字段和一个包含 Person 集合的类型s。 data Person = Person { _name :: String, _age :: Int
我有两个 session 这样做。 Session 1>start transaction; Session 1>select * from account for update; Session 2
我是一名优秀的程序员,十分优秀!