使用二维数组转换JSON为DataFrame时遭遇索引越界问题求助
解决List Index Out of Range错误的方案
嘿,我来帮你搞定这个问题!你遇到的list index out of range错误,根源出在二维数组的初始化环节。
问题原因
你初始化datadays的时候只写了datadays=[[]],这意味着这个列表里只有一个空列表(对应索引0)。当你进入第二个循环,尝试往datadays[1]添加元素时,这个索引位置根本还没被创建,Python找不到对应的元素,自然就抛出索引越界的错误了。
两种修复方案
方案1:提前初始化所有需要的空列表
直接把datadays初始化为包含三个空列表的二维数组,这样索引0、1、2都有对应的容器可以用:
from array import * import pandas as pd import seaborn as sns import matplotlib.pyplot as plt import json # 初始化包含3个空列表的二维数组,对应day1、day2、day3的数据 datadays=[[], [], []] # 读取day1数据,用with语句自动管理文件关闭 with open('day1','r') as day1: for i in range(1400): datadays[0].append(json.loads(day1.readline())) # 读取day2数据 with open('day2','r') as day2: for i in range(2500): datadays[1].append(json.loads(day2.readline())) # 读取day3数据 with open('day3','r') as day3: for i in range(1500): datadays[2].append(json.loads(day3.readline()))
方案2:按需添加空列表
如果你不想一开始就初始化三个列表,也可以在每个循环前,往datadays里追加新的空列表:
from array import * import pandas as pd import seaborn as sns import matplotlib.pyplot as plt import json datadays=[[]] # 读取day1数据 with open('day1','r') as day1: for i in range(1400): datadays[0].append(json.loads(day1.readline())) # 先添加空列表,再读取day2数据 datadays.append([]) with open('day2','r') as day2: for i in range(2500): datadays[1].append(json.loads(day2.readline())) # 再添加空列表,读取day3数据 datadays.append([]) with open('day3','r') as day3: for i in range(1500): datadays[2].append(json.loads(day3.readline()))
额外小建议
我把代码里的open()改成了with语句,这样Python会自动帮你关闭文件,不用手动调用close(),既避免了资源泄漏,代码也更简洁。
内容的提问来源于stack exchange,提问作者Kashan
相关产品推荐
相关产品推荐

