python - 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() 等都在工作。在我单独连接的数据集的第二部分,聚合起作用了。
有人可以建议如何处理这个错误吗?谢谢!
解决方案
我认为您的问题是您的一个或多个 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
推荐阅读
- angular - 不允许我将对象推入数组
- javascript - “TypeError:无法将未定义或 null 转换为对象”呈现嵌套 JSON
- r - 如何找到直方图一部分下的区域?
- firebase - Firebase Firestore 在物理设备上通过 wifi 故障转移并出现错误:无法访问 Cloud Firestore 后端
- java - 在 Java 中编写静态方法以使用循环返回字符串
- arrays - 快速将数组的子集设置为相同的值
- c# - 使用 API 未找到 Azure Devops 测试计划 ID
- python - 填充的 __init__ 似乎阻止访问同一包中的模块
- docusignapi - 如果触发文本字段不为空,DocuSign 必填字段?
- mapbox - 使用丢弃的标记和搜索查询初始化 mapBox 地图