Pandas - groupby ValueError:无法使用包含多个元素的元组对列进行子集化。使用列表代替

Sha*_*e S 5 python dataframe pandas

我将我的 Pandas 从我认为是 1.5.1 更新到了 2.0.1。无论如何,我开始在一些以前运行良好的代码上出现错误。

df = df.groupby(df['date'].dt.date)['Lake', 'Canyon'].mean().reset_index()
Run Code Online (Sandbox Code Playgroud)

回溯(最近一次调用最后一次):文件“f:...\My_python_file.py”,第 37 行,in df = df.groupby(df['date'].dt.date)['Lake', 'Canyon' ].mean().reset_index() 文件“C:\Users...\Local\Programs\Python\Python310\lib\site-packages\pandas\core\groupby\generic.py”,第 1767 行,在getitem raise中ValueError( ValueError: 无法使用包含多个元素的元组对列进行子集化。请改用列表。

Cor*_*ien 14

如果不使用双括号选择多列,则之前的版本Pandas < 2.0.0会引发 aFutureWarning

FutureWarning:使用多个键进行索引(隐式转换为键元组)将被弃用,请改用列表

Pandas >= 2.0.0,它提出了ValueError

ValueError:无法将列与包含多个元素的元组进行子集化。请改用列表。

例如:

# Pandas < 2.0.0
#             Missing [[ ... ]] --v              --v
>>> df.groupby(df['date'].dt.date)['Lake', 'Canyon'].mean().reset_index()
...
FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead.
  df.groupby(df['date'].dt.date)['Lake', 'Canyon'].mean().reset_index()

# Pandas >= 2.0.0
>>> df.groupby(df['date'].dt.date)['Lake', 'Canyon'].mean().reset_index()
...
ValueError: Cannot subset columns with a tuple with more than one element. Use a list instead.
Run Code Online (Sandbox Code Playgroud)

使用以下方法修复此问题[[col1, col2, ...]]

>>> df.groupby(df['date'].dt.date)[['Lake', 'Canyon']].mean().reset_index()
         date  Lake  Canyon
0  2023-05-02   1.5     3.5
Run Code Online (Sandbox Code Playgroud)

最小可重复示例:

import pandas as pd

df = pd.DataFrame({'date': ['2023-05-02 12:34:56', '2023-05-02 12:32:12'], 
                   'Lake': [1, 2], 'Canyon': [3, 4]})
df['date'] = pd.to_datetime(df['date'])
print(df)

# Output
                 date  Lake  Canyon
0 2023-05-02 12:34:56     1       3
1 2023-05-02 12:32:12     2       4
Run Code Online (Sandbox Code Playgroud)