Pandas DataFrame中未修改的float列为何被转为object类型?
问题原因分析与解决方案
你遇到的这个问题核心出在最后一行代码的写法上:
data.loc[data['product_type'] == 'product'] = 'Product'
这行代码的逻辑是把所有product_type等于'product'的整行数据都替换成字符串'Product',而不是只修改product_type这一列。
举个直观的例子:假设某一行原本的amount是100.0(float类型),执行这行代码后,这一行的所有列(包括amount)都会被赋值为字符串'Product'。这样一来,amount列里就同时存在原来的float数值和新的字符串值,Pandas为了兼容不同类型的数据,就会把整个列的类型转换成object。
正确的写法
如果你只想修正product_type列的标签,应该明确指定要修改的列,代码改成这样:
data.loc[data['product_type'] == 'product', 'product_type'] = 'Product'
这样就只会更新product_type列中符合条件的行,其他列(比如amount)的数据和类型都不会受到影响。
补充说明
Pandas的loc索引器如果只传入行筛选条件、没有指定列,就会对匹配到的整行进行操作。当你给整行赋值一个字符串时,该行的所有列都会被覆盖成这个字符串,导致列的类型发生变化——因为原本的数值类型和新的字符串类型无法共存于同一列的数值类型中,所以Pandas会将列降级为object类型来容纳多种数据类型。
内容的提问来源于stack exchange,提问作者user3088202
相关产品推荐
相关产品推荐

