我有一个数据框df,其中包含以下列:
id int64
quarter datetime64[ns]
decile int64
dtype: object
当我运行分组方式时,
df.groupby(['id', 'quarter'])
我收到以下错误:
TypeError: only integer scalar arrays can be converted to a scalar index
我认为正确的问题是:dtypes
的输出没有告诉我,以便实际上我可以将int
和datetime
用作索引?
versions:
pandas: 0.25.1
python: sys.version_info(major=3, minor=7, micro=3, releaselevel='final', serial=0)
有关该错误的其他观察结果:如果我避免事先重命名列,该错误就会消失。当我运行dtypes
方法时,确认重命名成功。
最后,这是groupby
并重命名后出现的同一错误的另一个示例(在此示例中,重命名很愚蠢,但是当我在聚合中包含date
时是必需的;我仅显示产生错误所需的最低代码)
# resample to quarterly
quart = df.groupby(
[pd.Grouper(key='id'),
pd.Grouper(key='date', freq='Q')]).agg({'call_qty':'sum'})
quart.columns = [['call_qty']] # << toggle this renaming code to trigger the error
F = quart['call_qty'].isna()
产生错误:
TypeError: only integer scalar arrays can be converted to a scalar index
感谢任何可能对此有所了解的人。
答案 0 :(得分:0)
我试图重现您的错误,但没有成功。
我创建为的源DataFrame:
id quarter decile
0 1 2019-01-01 5
1 1 2019-01-01 6
2 2 2019-04-01 1
3 2 2019-04-01 2
4 2 2019-07-01 3
5 2 2019-07-01 4
(具有您所描述的 dtype )。
我尝试将单独分组,就像您在评论中声明的那样:
gr = df.groupby(['id', 'quarter'])
和没有错误。
为了测试结果,我计算了每组的平均值:
gr.mean()
获取:
decile
id quarter
1 2019-01-01 5.5
2 2019-04-01 1.5
2019-07-01 3.5
作为另一项测试,我打印了每组的内容:
for key, grp in gr:
print(f'\nGroup: {key}\n{grp}')
获取:
Group: (1, Timestamp('2019-01-01 00:00:00'))
id quarter decile
0 1 2019-01-01 5
1 1 2019-01-01 6
Group: (2, Timestamp('2019-04-01 00:00:00'))
id quarter decile
2 2 2019-04-01 1
3 2 2019-04-01 2
Group: (2, Timestamp('2019-07-01 00:00:00'))
id quarter decile
4 2 2019-07-01 3
5 2 2019-07-01 4
因此,如您所见,使用“正常”(如上所示)源数据不会发生错误。
也许您有 Python 或 Pandas 的某些旧版本? 升级到当前版本并重复测试。