Python中DataFrame指定列厘米转英寸的实现与TypeError报错解决
单位统一转换为英寸的实现方案
报错根因
你收到的TypeError: 'Series' object cannot be interpreted as an integer是因为原代码中range(df['Item_lenght'])传入了pandas的Series对象作为参数,而range函数仅支持接收整数类型的入参,无法识别序列对象。
除此之外你的原代码还有几个逻辑问题:
- 直接对整个
df['lenght_measure']列做相等判断,返回的是布尔值序列,不能直接放在if语句中做单条件判断 - 函数内部硬编码引用外部的df变量,复用性极低
- return语句放在for循环内部,第一次循环执行就会直接返回结果,不会遍历所有行
正确实现方式
优先使用pandas向量化操作,效率远高于自行编写循环遍历:
方法1:单判断场景简洁实现(仅需处理厘米/英寸两种单位)
直接用numpy.where做条件赋值:
import numpy as np # 转换后的值存到新列length_inch,已经是英寸的数值直接保留 df['length_inch'] = np.where( df['lenght_measure'] == 'centimeters', df['Item_lenght'] / 2.54, df['Item_lenght'] )
方法2:多单位扩展场景实现
如果后续需要新增英尺、米等其他单位的转换逻辑,用按行apply的方式更易维护:
def convert_to_inch(row): # 可按需新增其他单位的转换规则 if row['lenght_measure'] == 'centimeters': return row['Item_lenght'] / 2.54 # 示例:新增英尺转英寸逻辑 # elif row['lenght_measure'] == 'feet': # return row['Item_lenght'] * 12 else: # 默认单位为英寸,直接返回原值 return row['Item_lenght'] # axis=1表示按行遍历传入函数 df['length_inch'] = df.apply(convert_to_inch, axis=1)
注意:你代码中的列名
lenght为拼写错误,正确拼写是length,如果实际表中列名是正确拼写,需要同步修改代码中的列名避免触发KeyError。
内容的提问来源于stack exchange,提问作者Anamaria Sitaru
相关产品推荐
相关产品推荐

