【问题标题】:Prevent Pandas read_Excel / read_CSV from assigning (i.e. inferring) an index automatically防止 Pandas read_Excel / read_CSV 自动分配(即推断)索引
【发布时间】:2018-07-21 20:55:12
【问题描述】:

完全是新手,这是我的第一个问题,所以对于任何无意的失礼提前道歉。

我有一个 Excel xlsx 格式的大型(ish)数据集,我想将其导入 pandas 数据框。数据具有列标题,但没有标题标签的第一列除外。这是excel表的样子:

Raw data

我在 Pandas 中使用 read_excel() 来读取数据。我正在使用的代码是: df = pd.read_excel('Raw_Data.xlsx', sheetname=0, labels=None, header=0, index_col=None)

(我尝试过 index_col = false 或 0,但由于显而易见的原因,它并没有改变任何东西)

列的标题被很好地拾取,但第一列(下图中用红色圈出的)被指定为索引。

wrong index

我试图从 read_excel 命令中得到的内容如下,索引以红色圈出:

correct index

我有其他 Excel 表,我使用 read_excel() 导入到 pandas 中,pandas 自动添加数字增量索引,而不是将其中一列推断为索引。

这些 Excel 工作表都没有在列标题中缺少标签,尽管我不确定这可能是这里的问题。

我知道我可以在导入后使用 reset_index() 命令来获取正确的索引。

想知道是否可以在无需执行 reset_index() 和 read_excel() 命令的情况下完成。即无论如何都可以防止索引被推断或强制熊猫像往常一样添加到索引列中。

提前谢谢你!

【问题讨论】:

  • 在我的测试中,导入后的.reset_index() 是你最好的选择。否则我能得到的最接近的是df = pd.read_excel('test.xlsx', usecols=range(1,99))。但这完全忽略了未标记的列,这不是您要查找的内容。
  • 谢谢。您是正确的,使用 usecols (1, 99) 似乎省略了第一列。这并不理想,因为该列有我需要的数据。想知道是否可以执行 usecols(0,99) 但标记第 0 列不应用作索引?
  • 我不知道,对不起!

标签: python excel pandas data-import


【解决方案1】:

由于单元格 A1 中的缺失值,我认为您不能仅使用 read_excel 函数来执行此操作。如果您想在使用 pandas 读取文件之前在该单元格中插入一些内容,您可以考虑使用 openpyxl,如下所示。

from openpyxl import load_workbook as load

path = 'Raw_Data.xlsx'
col_name = 'not_index'
cell = 'A1'

def write_to_cell(path, col_name, cell):

    wb = load(path)

    for sheet in wb.sheetnames:
        ws = wb[sheet]
        if ws[cell].value is None:
            ws[cell] = col_name

    wb.save(path)

【讨论】:

  • 谢谢。它可以工作,但并不理想,因为它需要修改 excel 文件。如果有办法关闭 read_excel 中的推断索引功能或强制添加索引,效果会更好。如果需要上传多个文件,也会更加通用。
  • 是的,完全同意。目前看来该功能不可用。只是觉得这可能是一个可以考虑的选择。
猜你喜欢
  • 2012-08-19
  • 2018-01-25
  • 1970-01-01
  • 2019-01-31
  • 2012-09-11
  • 2019-06-26
  • 1970-01-01
  • 2021-05-08
  • 1970-01-01
相关资源
最近更新 更多