我找不到可以合并具有相似值的单元格的直接函数,因此我编写了一个代码来执行此操作。
print(df)
column1 column2 column3 column4 column5
0 r_n_1 r_s_1 r_n_2 r_s_3 r_n_3
1 r_n_1 r_s_1 r_n_4 r_s_4 r_n_5
2 r_n_1 r_s_1 r_n_6 r_s_5 r_n_7
3 r_n_1 r_s_1 r_n_6 r_s_6 r_n_9
4 r_n_10 r_s_7 r_n_11 r_s_8 r_n_12
5 r_n_10 r_s_9 r_n_11 r_s_10 r_n_13
这是我必须合作的 df。但为了做到这一点,我所做的是,我迭代了一次以检查哪些值相似,并将其替换为-
。我没能成功的原因NoneType
是因为表格下面的单元格有一个NoneType
value,因此代码的后续部分将继续无限迭代。我所做的是:
for i in df.columns:
for j in range(len(df[i])):
for k in range(j+1,len(df[i])):
if df[i][j]== df[i][k]:
df[i][k]='-'
所以现在我的df
看起来像:
print(df)
column1 column2 column3 column4 column5
0 r_n_1 r_s_1 r_n_2 r_s_3 r_n_3
1 - - r_n_4 r_s_4 r_n_5
2 - - r_n_6 r_s_5 r_n_7
3 - - - r_s_6 r_n_9
4 r_n_10 r_s_7 r_n_11 r_s_8 r_n_12
5 - r_s_9 - r_s_10 r_n_13
现在我在数据框中拥有所有唯一值,我将检查是否df
元素是一个有效的输入或-
。和那些细胞-
将与其上限值合并。我是这样做的:
from openpyxl.workbook import Workbook
exportPath = r'C:\Users\T01144\Desktop\PythonExport.xlsx'
wb= Workbook()
ws=wb.active
rowInd=1
colInd=1
colList=['-', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H','I'] # Continue if there are more columns
for i in df.columns:
for j in range(0,len(df[i])):
if(df[i][j]!='-'):
ws.cell(row=rowInd,column=colInd,value=df[i][j])
else:
count=0
for l in range(j+1,len(df[i])):
count+=1
if df[i][l]!='-':
count-=1
break
ws.merge_cells(str(str(colList[colInd]+str(rowInd-1))+":"+str(colList[colInd]+str(rowInd+count))))
rowInd+=1
colInd+=1
rowInd=1
我现在的输出是:
完整代码可以找到here https://github.com/rohanpillai20/Rohan-Pillai-Blog-Files/blob/master/Merge-Cells-Python.py.
注意:有些人在创建 Excel 后可能会遇到此错误:
我们发现“PythonExport.xlsx”中的某些内容存在问题。您希望我们尽力恢复吗?如果您信任此工作簿的来源,请单击“是”。
只需忽略此错误并单击“是”即可。