我试图选择一个数据框的子集的一个子集,仅选择一些列,并在行上进行过滤。
df.loc[df.a.isin(['Apple', 'Pear', 'Mango']), ['a', 'b', 'f', 'g']]
但是,我得到了错误:
Passing list-likes to .loc or [] with any missing label will raise
KeyError in the future, you can use .reindex() as an alternative.
现在切片和过滤的正确方法是什么?
这是引入的更改v0.21.1
,并在文档中进行了详细说明-
以前,选择带有标签列表的地方总是可以成功的,其中缺少一个或多个标签将返回成功
NaN
。现在将显示一个FutureWarning
。将来这将提出
KeyError
(GH15747)。当传递带有至少1个缺失标签的标签列表时,此警告将在DataFrame
或
上触发Series
以使用.loc[]
或[[]]
。
例如,
df
A B C
0 7.0 NaN 8
1 3.0 3.0 5
2 8.0 1.0 7
3 NaN 0.0 3
4 8.0 2.0 7
在执行操作时尝试某种切片-
df.loc[df.A.gt(6), ['A', 'C']]
A C
0 7.0 8
2 8.0 7
4 8.0 7
没问题。现在,尝试替换C
为不存在的列标签-
df.loc[df.A.gt(6), ['A', 'D']]
FutureWarning: Passing list-likes to .loc or [] with any missing label will raise
KeyError in the future, you can use .reindex() as an alternative.
A D
0 7.0 NaN
2 8.0 NaN
4 8.0 NaN
因此,就您而言,该错误是由于传递给的列标签引起的loc
。再看看他们。
我正在使用从h5文件加载的调查数据作为通过熊猫包。在此中,所有行都是单个调查的结果,而列是单个调查中所有问题的答案。 我的目标是将此数据集缩减为更小的,仅包括在某个问题上具有某个描述答案的行,即在本列中具有相同的值。我能够确定具有此条件的所有行的索引值,但我找不到如何删除这些行或仅使用这些行创建新的df。
我可以从pandas文档中看出,您可以: 对于时间序列,您为什么不能: 我得到一个语法错误。不能在时间序列上执行多个切片范围吗?有解决办法吗?
问题内容: 我有一个带有熊猫MultiIndex的数据框: 然后,我从该DataFrame中删除一些行: 但是当我查询MutliIndex时,它仍然在两个国家都处于其水平。 我可以用一种很奇怪的方式自己解决这个问题: 但这似乎很混乱。有什么更好的方法我想念吗? 问题答案: 这是以前咬过我的东西。出于性能和哲学上的考虑,删除列或行不会更改基础MultiIndex,并且正式不将其视为Bug(在此处了解
问题内容: 我有一个类似MultiIndex的系列: 我想获得s [‘b’]值,其中第二个索引(’ ‘)在2到10之间。 在第一个索引上切片可以正常工作: 但不是第二种,至少从似乎是两种最明显的方式来看: 1)这将返回元素1至4,与索引值无关 但是,如果我反转索引,并且第一个索引是整数,第二个索引是字符串,则可以正常工作: 问题答案: 正如Robbie-Clarken回答的那样,从0.14开始,您
我有一个多索引数据框,看起来像 uid tid文本 abc x t1 bcd y t2 uid 和 tid 是索引。我有一个 uid 列表,并希望获取与该列表中的 uid 相对应的行,但保留第 2 级索引值 (tid)。我想在不运行任何显式循环的情况下执行此操作。这可能吗?
问题内容: 我想使用在数据帧中为另一列切片的字符串在Pandas中创建新列。 例如。 由一个简单的切片组成的新列在哪里 我尝试了许多尝试都无济于事-我觉得我缺少一些简单的东西。 最有效的方法是什么? 问题答案: 您可以调用该方法并应用切片,这将比其他方法更快,因为它是矢量化的(感谢@unutbu): 您也可以在df上调用lambda函数,但这在较大的数据帧上会比较慢: