如何将Int64Index转换为普通列表并访问其中元素?
问题描述
我有一个嵌套列表,但其中的元素是Int64Index类型,无法直接访问单个值。想请教有没有办法访问这些值,或者将其转换为普通列表?
原代码如下:
data_exp = pd.read_csv(path+'/exp.csv') exp_list=[] for i in range (1,n+1): check=data_exp.apply(lambda x: True if x['Set No.']==i else False, axis=1) temp=[data_exp[check==True].index+1] exp_list.append(temp) del temp display(exp_list)
该循环用于按条件筛选数据,输出内容符合预期,但格式存在问题。输出结果如下:
[[Int64Index([8, 11, 17, 20, 21, 27, 29, 36, 37, 38], dtype='int64')], [Int64Index([1, 3, 7, 10, 14, 31, 33, 34, 35], dtype='int64')], [Int64Index([5, 9, 12, 15, 19, 23, 25, 26, 28, 32], dtype='int64')], [Int64Index([2, 4, 6, 13, 16, 18, 22, 24, 30, 39, 40], dtype='int64')]]
解决方案
直接访问Int64Index的单个值
Int64Index本身支持下标索引,和普通列表用法一致,你可以直接通过多层下标访问单个值:
# 获取第一个子列表中Int64Index的第一个元素 first_val = exp_list[0][0][0] # 获取第二个子列表中Int64Index的第三个元素 third_val = exp_list[1][0][2]
转换为普通列表
使用Int64Index的*.tolist()*方法可以直接将其转为普通Python列表,修改你的循环代码即可:
data_exp = pd.read_csv(path+'/exp.csv') exp_list = [] for i in range(1, n+1): # 简化条件判断,无需apply check = data_exp['Set No.'] == i # 将索引+1后转成普通列表 temp = (data_exp[check].index + 1).tolist() # 保持原嵌套结构就append([temp]),如果不需要双层嵌套直接append(temp) exp_list.append([temp]) display(exp_list)
更高效的分组实现
不用循环遍历,用pandas的groupby可以更高效地完成分组提取索引的操作,代码更简洁:
data_exp = pd.read_csv(path+'/exp.csv') # 按Set No.分组,提取每组索引+1并转为列表 exp_list = [ (group.index + 1).tolist() for _, group in data_exp.groupby('Set No.') ] # 若需要保持原双层嵌套结构,改为: # exp_list = [ [ (group.index + 1).tolist() ] for _, group in data_exp.groupby('Set No.') ] display(exp_list)
内容的提问来源于stack exchange,提问作者PuSh
相关产品推荐
相关产品推荐

