Pandas导入Excel指定列时列名与列序号获取数据NaN结果互换问题
问题成因说明
1. 第一段代码(header=0)的输出逻辑
read_excel指定header=0时,会将Excel工作表的第一行作为DataFrame的列名,此时读取得到的data的列名就是Excel首行的内容,包含Record Type这个列名,但不存在名为1的列。- 你调用
pd.DataFrame(data, columns=[1,'Record Type'])时,columns参数是按列名匹配而非列位置匹配,找不到名为1的列就会自动填充NaN,Record Type列存在所以正常返回内容,就得到了你看到的第一组输出。
2. 第二段代码(header=None)的输出逻辑
read_excel指定header=None时,不会把Excel的任何行作为列名,pandas会自动生成从0开始的整数作为列名,此时data的列名为0、1、2……,不存在名为Record Type的列,原本Excel首行的Record Type会作为第0行第1列的普通数据存在。- 同样按列名匹配的规则,名为
1的列存在可以正常返回内容,找不到Record Type列就会整列填充NaN,就出现了和第一组输出NaN位置互换的情况。
正确按位置选列的写法
如果你要按位置取第1列(pandas列索引从0开始),应该用iloc方法,示例:
# header=0时取第1列 df = data.iloc[:, [1]] # 如需重命名列可补充:df.columns = ['自定义列名']
内容的提问来源于stack exchange,提问作者ah2Bwise
相关产品推荐
相关产品推荐

