将 Excel 文件读入 pandas 数据帧时保留撇号

Keep apostrophes when reading Excel file into pandas dataframe

提问人:Arseny Yershov 提问时间:8/17/2023 更新时间:8/17/2023 访问量:98

问:

将 Excel 文件读入 Pandas 数据帧,如下所示:

import pandas as pd

df = pd.read_excel(open('C:/somedir/somefile.xlsx','rb'), sheet_name=0)
print(df)

如果单元格中的值以 '(单引号、撇号)开头 - pandas 会省略它。例如,它将 '123 转换为 123。但我需要按原样得到它,'123。

我意识到 Excel 将单引号视为文本限定符。但是,也许有一些解决方法可以使 pandas 在单元格值的开头保留单引号?

尝试摆弄 dtype - 但仍然没有运气。

python pandas excel 数据帧 撇号 xlwings

评论

0赞 DS_London 8/17/2023
正如你所说,我怀疑你遇到了Excel对单元格的分离及其显示方式。总是 123,这就是大熊猫正在捡到的东西。不想气馁,不久前我遇到了类似的问题,我的回忆是我从未解决过!valuevalue
0赞 BigBen 8/17/2023
您可能需要直接使用 openpyxl(或者 xlwings 作为替代方案)来执行此操作。
0赞 Arseny Yershov 8/17/2023
我直接尝试了openpyxl - 但是openpyxl.load_workbook(path).active.cell(row=2, column=1).value也省略了开头的单引号。在VBA中,我们可以使用Cells(2,1)。PrefixCharacter 获取单引号 - 但找不到如何在 Python 中获取相应的属性。
0赞 Timeless 8/17/2023
@ArsenyYershov,你能解释一下为什么你需要保留这些撇号吗?一个有意义的例子/用例会很棒;)
0赞 Arseny Yershov 8/17/2023
这是用户的要求 - 他们需要区分 123 和 '123(并将 '123 标记为错误)。

答:

0赞 Timeless 8/17/2023 #1

您可以尝试使用

#pip install xlwings
import xlwings as xw
    
with xw.App(visible=False) as app:
    wb = xw.Book("file.xlsx")
    
    df = (
        wb
         .sheets["Sheet1"].used_range
         .options(pd.DataFrame, index=False, header=True)
         .value
    )

输出:

>>> print(df)

    col1
0    123
1 123.00

>>> df.values.ravel().tolist()

# ['123', 123.0]

使用的输入 () :file.xlsx

enter image description here

评论

0赞 Arseny Yershov 8/17/2023
谢谢,兄弟!不完全是我在输出('123)中所期望的,但无论如何都是一个很好的解决方案。可悲的是,它需要 Excel 安装 - 我的最终代码需要在 Linux(在 k8s Docker 容器中)下运行,那里不会有任何 Excel。