防止Pandas read_Excel / read_CSV自动分配(即推断)索引

时间:2018-02-11 16:32:51

标签: python excel pandas data-import

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

我有一个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()命令的情况下完成。即无论如何都要阻止推断索引或强制pandas像往常一样在索引列中添加。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

由于单元格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)