当前位置: 首页 > 面试题库 >

熊猫用0.21.0切片FutureWarning

尉迟京
2023-03-14
问题内容

我试图选择一个数据框的子集的一个子集,仅选择一些列,并在行上进行过滤。

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函数,但这在较大的数据帧上会比较慢: