【问题标题】:Pandas ExcelFile read columns as stringPandas ExcelFile 将列读取为字符串
【发布时间】:2018-08-28 14:37:19
【问题描述】:

我知道您可以在使用pd.read_excel(如here 概述)读取excel 时指定数据类型。你能用pd.ExcelFile做同样的事情吗?

我有以下代码:

 if ".xls" in 
     xl = pd.ExcelFile(path + "\\" + name, )
     for sheet in xl.sheet_names:
         xl_parsed = xl.parse(sheet)

解析工作表时,列中的某些值以科学计数法显示。在加载之前我不知道列名,所以我需要将所有内容作为字符串导入。理想情况下,我希望能够做类似xl_parsed = xl.parse(sheet, dtype = str) 的事情。有什么建议吗?

【问题讨论】:

  • 请确保您在询问之前参考了the documentation。您链接的问题中接受的答案表明 read_excel 采用 converters 参数。 pd.ExcelFile.parse 也是如此。你试过了吗?
  • 虽然我应该更仔细地阅读您问题的结尾,因为它涉及文档未涵盖的内容。有一个关于它的问题here 已关闭但似乎没有以任何适当的方式解决。那里有一种方法可以让您适应;在 xlrd 中打开 Excel,检查标题以获取名称,并创建一个字典理解,然后作为 converters 传递。有点丑。
  • @roganjosh 感谢您的输入,这就是我所做的!我会发布它作为答案
  • parse方法支持您建议的解决方案,虽然文档中没有明确提及,所以您可以使用xl_parsed = xl.parse(sheet, dtype=str)

标签: python pandas dataframe


【解决方案1】:

我接受了 roganjosh 的建议 - 先打开 excel,获取列名,然后作为转换器传递。

if ".xls" in name:
    xl = pd.ExcelFile(path)
    sheetCounter = 1
        for sheet in xl.sheet_names:
        ### Force to read as string ###
        column_list = []
        df_column = pd.read_excel(path, sheetCounter - 1).columns
        for i in df_column:
            column_list.append(i)
        converter = {col: str for col in column_list}
        ##################
        xl_parsed = xl.parse(sheet, converters=converter)
        sheetCounter = sheetCounter + 1

【讨论】:

  • 感谢您的回答。 column_list 似乎没有意义,你可以直接使用df_column。您也可以使用for i, sheet in enumerate(xl.sheet_names): 代替sheetCounter。我假设 for sheet in ... 应该缩进 -4 个空格。
【解决方案2】:

如果您更喜欢更清洁的解决方案,我使用了以下解决方案:

excel = pd.ExcelFile(path)
for sheet in excel.sheet_names:
    columns = excel.parse(sheet).columns
    converters = {column: str for column in columns}

    data = excel.parse(sheet, converters=converters)

【讨论】:

    猜你喜欢
    • 2018-03-23
    • 2019-05-31
    • 2013-06-04
    • 1970-01-01
    • 2021-12-05
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    相关资源
    最近更新 更多