当前位置: 首页 > 知识库问答 >
问题:

熊猫,未来警告:多键索引

韩禄
2023-03-14

当我将函数应用于Groupby对象的多个列时,Pandas会抛出一个Future Warning。它建议使用列表作为索引,而不是元组。一个人会怎么做?

>>> df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]])
>>> df.groupby([0,1])[1,2].apply(sum)
<stdin>:1: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead.
     1  2
0 1      
1 2  2  3
4 5  5  6
7 8  8  9

共有3个答案

郑狐若
2023-03-14

上面的例子有些微不足道。我试图删除更复杂代码中的警告消息。如何将下面的代码转换为使用列列表来消除警告?

# Standard imports
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter

# Ensure plots are displayed inline
%matplotlib inline
#%matplotlib notebook

# Read in some data to show some real world exampled
df = pd.read_excel("https://github.com/chris1610/pbpython/blob/master/data/sample-salesv3.xlsx?raw=true")

# Examine the dataframe
df.head()

# Summarize the data by customer and get the top 10 customers. Also, clean up the column names for consistency

top_10 = (df.groupby('name')['ext price', 'quantity']
          .agg({'ext price': 'sum', 'quantity': 'count'})
          .sort_values(by='ext price', ascending=False))[:10].reset_index()

`C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:1: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead.
  """Entry point for launching an IPython kernel.`

# Output the top 10
top_10

我尝试了这段代码,但我发现了真正的错误,而不仅仅是警告:

top_10 = (df.groupby('name')['ext price', 'quantity']
          .agg([['ext price', 'sum'], ['quantity', 'count']])
          .sort_values(by='ext price', ascending=False))[:10].reset_index()

C:\ProgramData\Anaconda3\lib\site packages\ipykernel\u启动器。py:1:FutureWarning:将不推荐使用多个键(隐式转换为键的元组)进行索引,请改用列表。“”“启动IPython内核的入口点。

---------------------------------------------------------------------------类型错误回溯(最近一次调用上次)~\AppData\Local\Temp/ipykernel\u 3644/534927805。py in 1 top_10=(df.groupby('name')['ext price','quantity']----

C:\ProgramData\Anaconda3\lib\site packages\pandas\core\groupby\generic。聚合py(self、func、engine、engine_-kwargs、*args、**kwargs)940返回self。obj_构造函数(结果,索引=索引,列=数据.列)941--

C:\ProgramData\Anaconda3\lib\site packages\pandas\core\aggregation。如果未重新标记,则在重建_func(func,**kwargs)88 89中显示py:---

类型错误:不可释放类型:列表

柯阳曦
2023-03-14

在groupby方法后使用双括号。单括号用于输出熊猫系列,双括号用于输出熊猫数据帧。

df.groupby([0,1])[[1,2]].apply(sum)
孔礼骞
2023-03-14

熊猫1.0中引入了此警告。0,在GitHub上讨论之后。因此,最好利用那里的建议:

df.groupby([0, 1])[[1, 2]].apply(sum)

也可以将切片操作移到末尾,但效率不高:

df.groupby([0, 1]).apply(sum).loc[:, 1:]

感谢@ALollz和@cmosig提供的有用意见。

 类似资料:
  • 问题内容: 当我运行程序时,Pandas每次都会发出如下“未来警告”。 我得到了味精,但我只是想一次又一次地停止Pandas显示此类味精,是否可以设置任何buildin参数以使Pandas不会弹出“未来警告”? 问题答案: 在github上发现了这个…

  • 当我在spyder中使用pandas绘图数据时。它将始终显示一条警告消息: C:\ProgramData\Anaconda3\lib\site packages\pandas\core\index。py:494:SettingWithCopyWarning:试图在数据帧切片的副本上设置值。尝试使用。loc[row\u indexer,col\u indexer]=改为value。请参阅文档中的注意

  • 我想用替换大于任意数字(本例中为100)的

  • 问题内容: 在Pandas方法的文档中,我们具有: 我的结构如下: 我想要这样的东西: 但是当我运行该方法时,它是在说: 这没有意义,即使在示例中,该列上也有重复的条目。我将列用作数据透视表的索引,即方法调用的第一个参数。 问题答案: 对我来说还好吗?您可以发布正在使用的确切数据透视方法调用吗?

  • 问题内容: 因此,我了解到可以使用DataFrame.groupby而不用使用MultiIndex进行子采样/横截面。 另一方面,当我在DataFrame上具有MultiIndex时,仍然需要使用DataFrame.groupby进行子采样/横截面。 那么,除了在打印时非常有用和漂亮地显示层次结构之外,MultiIndex有什么好处? 问题答案: 在pandas 0.4版本中引入了分级索引(也称为

  • 问题内容: 我有一个带有列“ A”和“ B”的多索引数据框。 有没有一种方法可以通过在多索引的一列上进行过滤而不选择将索引重新设置为单列索引来选择行? 例如。 问题答案: 一种方法是使用Index方法: 在0.13,你就可以使用与参数: 注意:如果这是列MultiIndex而不是索引,则可以使用相同的技术: