pd.read_excel生成字典时索引列整数转字符串失败问题
问题原因及解决办法
原因分析
你遇到的问题核心是:pd.read_excel的dtype参数不会对被指定为索引的列生效。当你设置index_col=0时,pandas会优先读取该列作为索引,这个过程会自动推断数据类型,后续的dtype配置只对普通数据列(比如这里的size_webshop)起作用,所以size列里的数值型数据还是被识别成了int,而size_webshop列的数值则成功转为字符串。
解决办法
这里提供三种可行的解决方案:
方案1:先读取数据再设置索引
先完整读取两列并指定所有列的类型,之后再将size列设为索引并转字典:
fields = ['size','size_webshop'] # 先读取数据,确保size列被转为字符串 df = pd.read_excel('path.xlsx', usecols=fields, dtype={'size': str, 'size_webshop': str}) # 设置索引并转换为字典 dct_of_sizes = df.set_index('size')['size_webshop'].to_dict()
方案2:读取后手动转换索引类型
先按原方式读取,再将索引转为字符串类型:
fields = ['size','size_webshop'] dct_of_sizes = pd.read_excel('path.xlsx', usecols=fields, index_col=0, squeeze=True, dtype={'size_webshop': str}) # 将索引强制转为字符串 dct_of_sizes = dct_of_sizes.rename(index=str).to_dict()
方案3:使用converters参数指定转换函数
converters参数可以作用于所有列(包括要作为索引的列),直接指定转换逻辑:
fields = ['size','size_webshop'] dct_of_sizes = pd.read_excel( 'path.xlsx', usecols=fields, index_col=0, squeeze=True, converters={'size': str, 'size_webshop': str} ).to_dict()
内容的提问来源于stack exchange,提问作者Ron Kieftenbeld
相关产品推荐
相关产品推荐

