Xlsxwriter条件格式循环问题
Xlsxwriter conditional formatting in loop problem
我有 Pandas 带有 multiheader 的枢轴数据框,并且我只在循环中的几列上应用条件格式(例如,6,7,9,10,12,13。 ..) 我已经使用 for Loop 如下:
for i in range(6,len(df1.columns),3):
print(i)
worksheet.conditional_format(4,int(i),len(df1)+3,int(i+1), {'type': 'cell', \
'criteria': '>=', \
'value':'45',\
'format': format1
})
这使我的 excel 输出损坏,而且如果我修复 Excel,我可以看到我的 header 移动了 1 个单元格。此外,excel 中没有条件格式设置。谁能帮忙解决这个问题?
另外,如果我从代码输出中删除这一行也可以,但没有条件格式。
示例代码如下:
import pandas as pd
th='30000'
cars = {'day':['aug','aug','sep','sep','aug'],
'Brand': ['Honda Civic','Toyota Corolla','Ford Focus','Audi A4','Hyundai Elite i20'],
'Type':['sedan,','sedan','hatchback','hatchback','hatchback'],
'Down Price': [22000,25000,27000,35000,10000]
}
df = pd.DataFrame(cars, columns = ['day','Brand', 'Type','Down Price'])
dfpivot=pd.pivot_table(df,index=['day'],columns=['Brand','Type'],values=['Down Price'],aggfunc=np.max)
with pd.ExcelWriter(OUTPATH+'Report.xlsx', engine='xlsxwriter') as writer:
dfpivot.to_excel(writer,sheet_name = 'data')
workbook = writer.book
worksheet = writer.sheets['data']
format1 = workbook.add_format({'bg_color': '#FFC7CE',
'font_color': '#9C0006'})
for i in range(1,len(dfpivot.columns),1):
print(i)
worksheet.conditional_format(4,int(i),len(df1)+3,int(i+1), {'type': 'cell', \
'criteria': '>=', \
'value':th,\
'format': format1
})
writer.save()
我重新格式化了您的代码并修复了一些小问题:
import pandas as pd
import numpy as np
threshold = '30000'
cars = {'day': ['aug', 'aug', 'sep', 'sep', 'aug'],
'Brand': ['Honda Civic', 'Toyota Corolla', 'Ford Focus',
'Audi A4', 'Hyundai Elite i20'],
'Type': ['sedan,', 'sedan', 'hatchback', 'hatchback', 'hatchback'],
'Down Price': [22000, 25000, 27000, 35000, 10000]}
df = pd.DataFrame(cars, columns=['day', 'Brand', 'Type', 'Down Price'])
dfpivot = pd.pivot_table(df, index=['day'],
columns=['Brand', 'Type'],
values=['Down Price'], aggfunc=np.max)
with pd.ExcelWriter('Report.xlsx', engine='xlsxwriter') as writer:
dfpivot.to_excel(writer, sheet_name='data')
workbook = writer.book
worksheet = writer.sheets['data']
format1 = workbook.add_format({'bg_color': '#FFC7CE',
'font_color': '#9C0006'})
max_column = len(cars['Brand'])
worksheet.set_column(1, max_column, 15)
for i in range(1, len(dfpivot.columns), 1):
print(i)
worksheet.conditional_format(4, i, len(df) + 3, i + 1,
{'type': 'cell',
'criteria': '>=',
'value': threshold,
'format': format1})
它运行并且输出文件具有条件格式:
所以,XlsxWriter 代码有效。但是,范围看起来不正确(它们重叠),因此您应该检查您使用的行号和列号是否正确。
此外,可能没有必要使用单独的条件格式,因为在所有情况下标准都是相同的。在循环外创建一种条件格式可能就足够了。
我有 Pandas 带有 multiheader 的枢轴数据框,并且我只在循环中的几列上应用条件格式(例如,6,7,9,10,12,13。 ..) 我已经使用 for Loop 如下:
for i in range(6,len(df1.columns),3):
print(i)
worksheet.conditional_format(4,int(i),len(df1)+3,int(i+1), {'type': 'cell', \
'criteria': '>=', \
'value':'45',\
'format': format1
})
这使我的 excel 输出损坏,而且如果我修复 Excel,我可以看到我的 header 移动了 1 个单元格。此外,excel 中没有条件格式设置。谁能帮忙解决这个问题? 另外,如果我从代码输出中删除这一行也可以,但没有条件格式。
示例代码如下:
import pandas as pd
th='30000'
cars = {'day':['aug','aug','sep','sep','aug'],
'Brand': ['Honda Civic','Toyota Corolla','Ford Focus','Audi A4','Hyundai Elite i20'],
'Type':['sedan,','sedan','hatchback','hatchback','hatchback'],
'Down Price': [22000,25000,27000,35000,10000]
}
df = pd.DataFrame(cars, columns = ['day','Brand', 'Type','Down Price'])
dfpivot=pd.pivot_table(df,index=['day'],columns=['Brand','Type'],values=['Down Price'],aggfunc=np.max)
with pd.ExcelWriter(OUTPATH+'Report.xlsx', engine='xlsxwriter') as writer:
dfpivot.to_excel(writer,sheet_name = 'data')
workbook = writer.book
worksheet = writer.sheets['data']
format1 = workbook.add_format({'bg_color': '#FFC7CE',
'font_color': '#9C0006'})
for i in range(1,len(dfpivot.columns),1):
print(i)
worksheet.conditional_format(4,int(i),len(df1)+3,int(i+1), {'type': 'cell', \
'criteria': '>=', \
'value':th,\
'format': format1
})
writer.save()
我重新格式化了您的代码并修复了一些小问题:
import pandas as pd
import numpy as np
threshold = '30000'
cars = {'day': ['aug', 'aug', 'sep', 'sep', 'aug'],
'Brand': ['Honda Civic', 'Toyota Corolla', 'Ford Focus',
'Audi A4', 'Hyundai Elite i20'],
'Type': ['sedan,', 'sedan', 'hatchback', 'hatchback', 'hatchback'],
'Down Price': [22000, 25000, 27000, 35000, 10000]}
df = pd.DataFrame(cars, columns=['day', 'Brand', 'Type', 'Down Price'])
dfpivot = pd.pivot_table(df, index=['day'],
columns=['Brand', 'Type'],
values=['Down Price'], aggfunc=np.max)
with pd.ExcelWriter('Report.xlsx', engine='xlsxwriter') as writer:
dfpivot.to_excel(writer, sheet_name='data')
workbook = writer.book
worksheet = writer.sheets['data']
format1 = workbook.add_format({'bg_color': '#FFC7CE',
'font_color': '#9C0006'})
max_column = len(cars['Brand'])
worksheet.set_column(1, max_column, 15)
for i in range(1, len(dfpivot.columns), 1):
print(i)
worksheet.conditional_format(4, i, len(df) + 3, i + 1,
{'type': 'cell',
'criteria': '>=',
'value': threshold,
'format': format1})
它运行并且输出文件具有条件格式:
所以,XlsxWriter 代码有效。但是,范围看起来不正确(它们重叠),因此您应该检查您使用的行号和列号是否正确。
此外,可能没有必要使用单独的条件格式,因为在所有情况下标准都是相同的。在循环外创建一种条件格式可能就足够了。