我有一个列表,其中包含存储为字典的输入文件,这些字典表示导入的Excel文件。每个字典都有多个表存储为数据帧
当一列中出现三个NaN值时,我希望存储不同字典(Excel文件)的相同键(工作表)并将其相互追加,同时断开工作表。我初始化了一个新的字典,它应该与字典(Excel文件)具有相同的键(表),但现在所有数据都附加到这个字典d_sheets
为此,我使用以下代码:
input_files = []
for file in read_input:
input_file = pd.read_excel(io=file, sheet_name=needed_sheets, dtype=str)
input_files.append(input_file)
d_sheets = {}
for dictionary in input_files:
for sheet_name in sorted(dictionary):
d_sheets[sheet_name] = pd.DataFrame()
if sheet_name != 'Sheetname1':
cell = dictionary[sheet_name]['Columnname1']
else:
cell = dictionary[sheet_name]['Columnname2']
three_NaNs = cell.isna() & cell.shift(-1).isna() & cell.shift(-2).isna()
first_instance = cell[three_NaNs].index.min()
good_data = dictionary[sheet_name][cell.index <= first_instance]
d_sheets[sheet_name].append(good_data)
d_sheets[sheet_name] = pd.concat([d_sheets[sheet_name], good_data], axis=0)
对于单个字典(Excel文件),布尔语句执行其工作,键存储在d_sheets
中。然而,我找不到一种有效的方法来循环使用input_files
中的词典
是什么原因导致我无法迭代列表input_files
中的项目并将所有工作表存储在d_sheets
中
我已经解决了这个问题,因为数据帧初始化不应该在
d_sheets[sheet_name] = pd.DataFrame()
中的for循环中。这样,循环的每次迭代都会清除数据帧,然后执行计算。最后,这将导致最新的Excel文件仅作为输出,而不是合并所有文件如果我正确理解了你的“破单”策略(如果我不理解,请原谅),以下是一个可能完成此任务的脚本:
相关问题 更多 >
编程相关推荐