首页 > 解决方案 > IndexError:索引 0 超出轴 0 的范围,大小为 0,用于尝试查找模式(最常见的值)

问题描述

我连接了 500 个 XSLX 文件,其形状为 (672006, 12)。所有的进程都有一个唯一的编号,我想通过 groupby() 数据来获取相关信息。对于温度,我想选择第一个和数字最常见的值。

测试数据:

df_test = 
pd.DataFrame({"number": [1,1,1,1,2,2,2,2,3,3,3,3], 
'temperature': [2,3,4,5,4,3,4,5,5, 3, 4, 4], 
'height': [100, 100, 0, 100, 100, 90, 90, 100, 100, 90, 80, 80]})

df_test.groupby('number')['temperature'].first()

df_test.groupby('number')['height'].agg(lambda x: x.value_counts().index[0])

我在尝试获取每个数字最频繁的高度时收到以下错误:IndexError: index 0 is out of bounds for axis 0 with size 0

奇怪的是,mean() / first() / max() 等都在工作。在我单独连接的数据集的第二部分,聚合起作用了。

有人可以建议如何处理这个错误吗?谢谢!

标签: pythonpandasindex-error

解决方案


我认为您的问题是您的一个或多个 groupby 正在返回所有 NaN 高度:

请参阅此示例,我在其中添加了一个数字 4,其高度为 np.NaN。

df_test = pd.DataFrame({"number": [1,1,1,1,2,2,2,2,3,3,3,3,4,4], 
'temperature': [2,3,4,5,4,3,4,5,5, 3, 4, 4, 5, 5], 
'height': [100, 100, 0, 100, 100, 90, 90, 100, 100, 90, 80, 80, np.nan, np.nan]})

df_test.groupby('number')['temperature'].first()

df_test.groupby('number')['height'].agg(lambda x: x.value_counts().index[0])

输出:

IndexError: index 0 is out of bounds for axis 0 with size 0

让我们用零填充那些 NaN 并重新运行。

df_test = pd.DataFrame({"number": [1,1,1,1,2,2,2,2,3,3,3,3,4,4], 
'temperature': [2,3,4,5,4,3,4,5,5, 3, 4, 4, 5, 5], 
'height': [100, 100, 0, 100, 100, 90, 90, 100, 100, 90, 80, 80, np.nan, np.nan]})

df_test = df_test.fillna(0) #Add this line
df_test.groupby('number')['temperature'].first()

df_test.groupby('number')['height'].agg(lambda x: x.value_counts().index[0])

输出:

number
1    100.0
2     90.0
3     80.0
4      0.0
Name: height, dtype: float64

推荐阅读