有没有一种方法可以让我读取所有的xlsx文件,然后删除所有的并购买行数最多的文件?
理想情况下,我想找到真正包含最多数据的表,如字节大小,但行现在可以工作
我也希望能够通过加载来做到这一点,例如,加载文件的头,这样加载时间就更少了,但我可以使用.columns和len来查找哪张纸的列数最多
读取Excel文件的所有工作表并将其存储在dictionary
:中
xls = pd.ExcelFile('excel_file_path.xls')
sheet_to_df_map = {}
for sheet_name in xls.sheet_names:
sheet_to_df_map[sheet_name] = xls.parse(sheet_name)
现在,您可以循环遍历您的字典,并创建另一个具有数据帧行数的字典,如下所示:
row_count_dict = {}
for key,val in sheet_to_df_map.items():
row_count_dict[key] = val.shape[0]
然后通过值找到row_count_dict
的最大值:
df_with_max_rows = max(row_count_dict, key=row_count_dict.get)
然后用这个键查找原始dict,得到max_rows:的数据帧
df = sheet_to_df_map.get(df_with_max_rows)
这将是您的最终数据帧。
不幸的是,例如,在nrows=1的情况下读取较少的行似乎并不能减少初始加载时间。下面的代码将为您找到行数最多的工作表,然后保存它。请注意,如果最大行数绑定了多个工作表,则只保存最后一个
read_in = pd.read_excel(items, sheet_name = None)
keys = []
for ijk in read_in.keys():
keys.append(ijk)
list_lens = []
for key in keys:
list_lens.append(len(read_in[key]))
counter = 0
for lengths in list_lens:
if lengths == max(list_lens):
if len(read_in[keys[counter]])>0:
writer = pd.ExcelWriter(filename, engine='xlsxwriter',options={'strings_to_urls': False})#this ensures you can save longer links that excel tries to make hyperlinks, you can skip it and provide the file name instead of writer below for most code
read_in[keys[counter]].to_excel(writer, index = False)
writer.close()#unnecessary if you just gave the file name in the line above instead of using the writer object
counter = counter +1
这里发生的事情是,用sheets=None读入所有的表,并创建一个字典,其中键是表名,值是整个表的数据帧。然后访问每个数据帧,检查列数。然后,代码使用该信息只保存可以使用以最多列结尾的密钥访问的数据帧
这个答案与Mayank的答案非常相似,只是它应该稍微快一点,因为它没有创建字典并将解析的数据帧存储在其中。
wb = pd.ExcelFile(r'path.xlsx')
max_row_count = 0
for sheet in wb.sheet_names:
parsed_sheet = wb.parse(sheet)
row_count = len(parsed_sheet)
if row_count>max_row_count:
max_row_count = row_count
df = parsed_sheet