2列のPandasデータフレームがあります転置後。 Excelにエクスポートすると、最初の列にはxlsxwriterで制御できないフォーマットが設定されます(他のすべての列はフォーマットできます)。インデックス0のPandasデータフレームに新しい列を挿入しようとすると、インデックス1に挿入されます。この最初のデータフレーム列がPandasで変更できず、xlsxwriterでフォーマットできないのはなぜですか。
ここに私の元のコードがあります:
data_xls = pandas.read_excel(excelPath, "FlowTimes", index_col=None)
del data_xls["OBJECTID"] #Remove OBJECTID column
del data_xls["Shape_Length"] #Remove the Shape_Length column
data_xls.drop(data_xls.columns[0], axis =1) #Remove nameless first column
decimals = pandas.Series([0,2,0,2,0,2,0,2], index=["Length FT", "Length MI","Flow Minutes - Mean Annual","Flow Hours - Mean Annual")
data_xls2 = data_xls.round(decimals)
data_export = data_xls2.transpose() #Transpose columns to rows
data_export.reset_index()
data_export.insert(0,"Temp", None) #THIS IS A TESTING LINE TO SEE WHERE THE COLUMN INSERTS - IT SHOULD INSERT AS THE FIRST COLUMN AT INDEX 0
print data_export
os.remove(excelPath)
writer = pandas.ExcelWriter(excelPath + "x")
data_export.to_excel(writer, sheet_name = "FlowTimes", startcol = 0, startrow = 0, header=False) #header = false removes the 0 index in the first row
workbook = writer.book
worksheet = writer.sheets["FlowTimes"]
format1 = workbook.add_format()
format1.set_align("right")
format1.set_border(0)
format2 = workbook.add_format()
format2.set_bold()
worksheet.set_column("A:A", 30, format1)
worksheet.set_column("B:Z", 12, format1)
worksheet.set_row(0,None, format2)
writer.save()
テスト用にdata_export.insert列を含めない場合、出力は次のようになります。
0
Key Strategy Location Location A
Length FT 3551
Length MI 0.67
Flow Minutes - Mean Annual 35
Flow Hours - Mean Annual 0.58
ただし、インデックス0にdata_export.insert列を含めると、次のように最初の列の後に挿入されます。
Temp 0
Key Strategy Location None Location A
Length FT None 3551
Length MI None 0.67
Flow Minutes - Mean Annual None 35
Flow Hours - Mean Annual None 0.58
インデックス0に新しい列を挿入するか、xlsxwriterでエクスポート中に最初の列のフォーマットを制御するにはどうすればよいですか?
回答:
回答№1は1xlsxwriterがパンダをインポートすることがわかりました変更できないフォーマットのインデックス(行名)。最初の列にインデックスをコピーし、ヘッダーまたはインデックスなしでExcelにエクスポートすることで、この問題を回避しました。すべての列と行のxlsxwriterフォーマットが機能するようになりました。作業コードは次のとおりです。
data_xls = pandas.read_excel(excelPath, "FlowTimes" + gdbNum, index_col=None)
del data_xls["OBJECTID"] #Remove OBJECTID column
del data_xls["Shape_Length"] #Remove the Shape_Length column
data_xls.drop(data_xls.columns[0], axis =1) #Remove nameless first column
decimals = pandas.Series([0,2,0,2,0,2,0,2], index=["Length FT", "Length MI","Flow Minutes - Mean Annual","Flow Hours - Mean Annual")
data_export = data_xls2.transpose() #Transpose columns to rows
data_export.reset_index()
data_export.columns = data_export.iloc[0]
data_export["Key Strategy Location"] = data_export.index #adds index names (row names) as last column
cols = data_export.columns.tolist() #Create list of columns
cols.insert(0, cols.pop(-1)) #Move column with index names (row names) to be the first column
data_export = data_export[cols]
os.remove(excelPath)
writer = pandas.ExcelWriter(excelPath + "x")
data_export.to_excel(writer, sheet_name = "FlowTimes", startcol = 0, startrow = 0, header=False, index=False) #header = false removes index in the first row, index=false removes first column
workbook = writer.book
worksheet = writer.sheets["FlowTimes"]
format1 = workbook.add_format()
format1.set_align("right")
format1.set_border(0)
format2 = workbook.add_format()
format2.set_bold()
format2.set_align("center")
worksheet.set_column("B:Z", 20, format1)
worksheet.set_row(0,None, format2)
worksheet.set_column("A:A", 30, format1)
writer.save()