/ /パンダはインデックス0で列を追加できません-python、pandas、dataframe、transpose、xlsxwriter

Pandasはインデックス0に列を追加できません - python、pandas、dataframe、transpose、xlsxwriter

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は1

xlsxwriterがパンダをインポートすることがわかりました変更できないフォーマットのインデックス(行名)。最初の列にインデックスをコピーし、ヘッダーまたはインデックスなしで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()