使用Python(pandas)删除Excel首行首列失效及报错问题咨询
问题根因
两个问题本质是对pandas的基础规则不熟悉,没有什么玄学:
drop方法默认匹配的是行/列的标签值,不是从上到下/从左到右的位置序号,你传的0是要找的标签,不是“第一个”的意思。
读Excel时pandas默认把第一行当作列名,自动生成0开始的整数作为行索引;转置之后,原来的列名会变成新表的行索引,原来的行索引会变成新表的列名。这时候新表的行索引里根本没有0这个值——第一行的标签是pandas给空单元格自动补的Unnamed: 0,所以执行行删除的时候直接报找不到0的错。
第一条删列的语句不报错,是因为列标签里确实有0这个值,但这列根本不是你要删的第一列,属于删错了对象,当然看不到效果。- 导出Excel的时候没加
index=False,pandas默认会把行索引单独作为第一列写到文件里,就算你删对了列,导出后也会多出来一列索引,看起来就像首列没删干净。
修正方案
别跟标签较劲,直接按位置切片最省事,不管索引列名叫什么,直接跳过第一行第一列就行:
import pandas as pd file_name = 'ex1.xlsx' sheets = pd.read_excel(file_name, sheet_name=None) sheet_name, df = next(iter(sheets.items())) df = df.T # 行、列都从位置1开始取,直接跳过第一行第一列 df = df.iloc[1:, 1:] # 导出时关掉索引和表头写入,避免生成多余的行列 df.to_excel(file_name, sheet_name, index=False, header=False)
如果后续非要用drop按标签删,先跑print(df.index)和print(df.columns)把当前的行、列标签打印出来看清楚,不要想当然认为第一行第一列的标签就是0。
内容的提问来源于stack exchange,提问作者Oreboku42
相关产品推荐
相关产品推荐

