簡體   English   中英

在 python pandas Z6A8064B5DF479455500553C47C550 中的 header 列上方添加一行

[英]Adding a row above header columns in python pandas dataframe, without any file read/write

我需要在 dataframe 中的 header 列上方添加一行,將其轉換為 excel 文件,限制不能在本地進行任何文件讀取/寫入。 因此,我無法使用open('filename.xls', 'w') as f:

這是因為腳本將在本地無法讀取/寫入文件的地方運行。

例如,我想要這樣的東西

text here
*animal* *no_of_legs* *name*
cat       4            meow
bird      2            chirp
rabbit    2            bun

我有一個由所有動物數據組成的數組 allAnimals。 我嘗試allAnimals.insert(0,['text here])然后df = pd.DataFrame(allAnimals, columns=['animals', 'no_of_legs', 'name'])轉換為 dataframe。 然后我使用df.to_excel(xxx, index=False)但我得到的是這樣的東西:

*animal* *no_of_legs* *name*
text here
cat       4            meow
bird      2            chirp
rabbit    2            bun

或者,我嘗試的另一種方法涉及創建一個新的 dataframe 僅存儲“此處的文本”,然后嘗試使用 concat 但它不會水平添加數據。 它改為添加一個新列。 append 也是如此。 所以這就是我得到的:

            *animal* *no_of_legs* *name*
text here
             cat       4            meow
             bird      2            chirp
             rabbit    2            bun

我已經閱讀了一些與此類似的其他問題,但它們不太適用於我的情況,因此,我無法解決這個問題。 任何提示將不勝感激!

是否可以在 pandas 的標題上方添加一行

添加行*在*列名稱的頂部 Pandas Dataframe 作為 header 信息?

如何在 dataframe 的 header 行的頂部添加一個空行?

將行添加回 dataframe 的頂部

您可以通過將其設為 MultiIndex 來編輯具有附加列索引級別的數據框列。 將 df.columns 指定為 pd.MultiIndex:

嘗試重現該示例:

import pandas as pd


allAnimals = [['cat', 4, 'meow'], ['bird', '2', 'chirp'], ['rabbit', 2 ,'bun']]


df = pd.DataFrame(allAnimals, columns= ['animals', 'no_of_legs', 'name'])

df.columns = pd.MultiIndex.from_tuples(
    zip(['text here', '', ''], 
        df.columns))
df

Output:

輸出

如果需要,相應地刪除索引列。

這可能對您有幫助: 使用 pandas 附加列索引

上面的答案是回答問題的一大步,但是,它涉及多索引,然后不允許我在df.to_excel(xxx, index=False)中使用 index=False 。 這導致 excel 文件格式不正確,因為它現在是 index=True。

這意味着我得到了一個 excel 文件,如下所示: excel文件有格式問題

老實說,這里唯一的復雜之處是無法在本地讀/寫的限制。

我繼續研究如何解決這個問題,並遇到了一些文章:

如何隱藏行索引

在輸出多個 header pandas dataframe 到 ZBF57C906FA7D25866D07372E 時去掉索引

我無法實現第一個網站的答案,因為我無法提供本地路徑。 我決定使用第二個網站的第一個解決方法,其中涉及使用 openpyxl 和使用 bytesIO。

如果將來有人需要這個,這里是實現:

from openpyxl import load_workbook, Workbook

in_memory_fp = io.BytesIO()
df.to_excel(in_memory_fp)
in_memory_fp.seek(0,0)

workbook = load_workbook(in_memory_fp)
worksheet = workbook['Sheet1']

worksheet.delete_cols(1)
worksheet.delete_rows(3)

for i in worksheet.values:
    print(i)

workbook.save(in_memory_fp)

然后現在,excel 將被很好地格式化,如下所示: 格式更好的excel文件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM