2017-03-28 3 views
1

転置後に2列のPandasデータフレームがあります。 Excelにエクスポートすると、最初の列はxlsxwriterで制御できない書式設定となります(他の列はすべて書式設定できます)。インデックス0のパンダデータフレームに新しい列を挿入しようとすると、インデックス1に入ります。この最初のデータフレーム列はパンダでは変更不可能で、xlsxwriterでフォーマットできないのはなぜですか?ここでPandasはインデックス0に列を追加できません

は私の元のコードです:

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 

しかし、私はdata_exportが含まれている場合

      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の.insert列は、それがこのような最初の列の後に挿入しますxlsxwriterでエクスポートしているときに、インデックス0に新しい列を挿入するか、最初の列の書式を制御しますか?

答えて

1

xlsxwriterは、変更できない書式のpandasインデックス(行名)をインポートすることが判明しました。私は、インデックスを最初の列にコピーし、ヘッダーまたはインデックスなしで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() 
関連する問題