在Python pandas数据框架中,在标题列上方添加一行,不需要任何文件读/写

1 人关注

我需要在一个数据框架的标题列上方添加一行,该数据框架将被转换为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'])来转换为数据帧。然后我使用df.to_excel(xxx, index=False),但我得到了类似这样的东西。

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

另外,我尝试的另一种方法是创建一个新的数据框架,只存储 "这里的文本",然后尝试使用concat,但它并没有水平地添加数据。相反,它添加了一个新的列。append也是如此。所以这就是我得到的结果。

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

我读了一些与此类似的其他问题,但它们对我的情况不太适用,因此,我无法解决这个问题。如果有任何提示,我们将不胜感激!

是否可以在pandas中的页眉上方添加一行?

在*列名之上添加行,潘达斯数据框架作为标题信息?

如何在数据框架的标题行上面添加一个空行?

将行添加到数据框架的顶部

3 个评论
好的,我正在尝试。如果不成功,我将要求重新讨论我的问题。
这个问题确实提到了不能在本地读/写文件,所以提议的将pandas数据框架写到excel的解决方案似乎相当不适用。这个问题似乎完全不同,因为它试图寻求在pandas上使用DataFrames的解决方案,而不是将pandas数据框架写入excel。
@jezrael 我很抱歉,但我尝试了建议的解决方案中的方法,它没有帮助,因为对于 "pd.ExcelWriter(file-name, engine="xlsxwriter") "部分,我无法读取文件名。我试着用我的版本替换它,但我面临一个错误。
python
excel
pandas
dataframe
MatCode
MatCode
发布于 2022-08-11
2 个回答
piplup
piplup
发布于 2022-08-12
已采纳
0 人赞同

你可以通过让你的数据框架的列成为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))

Output:

如果需要的话,相应地删除索引列。

这可能对你有帮助。使用pandas的额外列索引工作

df.columns这一行应该做什么?你能不能包括一些解释,而不是只提供代码?
好的,我将相应地编辑我的帖子 :)
MatCode
MatCode
发布于 2022-08-12
0 人赞同

上面的答案在回答问题方面向前迈进了一大步,然而,它涉及到多索引,然后不允许我在 df.to_excel(xxx, index=False) 中使用index=False。这导致excel文件不符合格式,因为它现在是index=True。

这意味着我得到一个这样的Excel文件。

老实说,这里唯一复杂的是不能在本地读/写的限制。

我继续研究如何解决这个问题,并看到了一些文章。

How to hide the rows index

在输出多头pandas数据框架到excel时摆脱索引

我无法实现第一个网站的答案,因为我无法提供一个本地路径。我决定使用第二个网站的第一个解决方法,这涉及到使用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: