You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas使用.map()替换iPhone机型电池值报错的解决咨询

iPhone机型电池值替换问题解决

问题背景

定义了iPhone机型与电池容量的映射字典:

iphone_dict = {
  "iPhone 14 Pro Max": 4323,
  "iPhone 14 Plus": 4325,
  "iPhone 14 Pro": 3200,
  "iPhone 14": 3279,
  "iPhone 13 Pro Max": 3095,
  "iPhone 13 Pro": 3095,
  "iPhone 13": 3095,
  "iPhone 13 mini": 2406,
  "iPhone 12 Pro Max": 2815,
  "iPhone 12 Pro": 2815,
  "iPhone 12": 2815,
  "iPhone 12 mini": 2406,
  "iPhone SE (2022)": 2018,
  "iPhone SE (2020)": 1821,
  "iPhone 11 Pro Max": 3969,
  "iPhone 11 Pro": 3046,
  "iPhone 11": 3110,
  "iPhone XS Max": 3174,
  "iPhone XS": 2658,
  "iPhone XR": 2716,
  "iPhone X": 2716,
  "iPhone 8 Plus": 2691
}

需求:当DataFrame的CleanedPhoneName列包含“iPhone”时,用上述字典替换Battery列的值。

尝试的代码:

dfClean2['Battery'] = dfClean2[dfClean2['CleanedPhoneName'].str.contains('iPhone', case=False)].map(iphone_dict)

运行后报错:'DataFrame' object has no attribute 'map'

错误原因

dfClean2[dfClean2['CleanedPhoneName'].str.contains(...)]返回的是整个DataFrame,而map()是Pandas Series的专属方法,DataFrame没有这个属性,因此报错。

解决方法

方法一:精准定位替换(推荐)

用loc定位需要修改的行和列,针对CleanedPhoneName列做映射后赋值:

# 仅对包含iPhone的行,将CleanedPhoneName匹配字典后的值赋值给Battery列
dfClean2.loc[dfClean2['CleanedPhoneName'].str.contains('iPhone', case=False), 'Battery'] = dfClean2['CleanedPhoneName'].map(iphone_dict)

方法二:保留非iPhone行原电池值

如果希望非iPhone机型的Battery值保持不变,用mask()方法实现条件替换:

# 生成所有机型的电池映射值
battery_mapped = dfClean2['CleanedPhoneName'].map(iphone_dict)
# 仅替换iPhone行的Battery值,其他行保留原值
dfClean2['Battery'] = dfClean2['Battery'].mask(dfClean2['CleanedPhoneName'].str.contains('iPhone', case=False), battery_mapped)

补充处理:避免不匹配机型出现NaN

如果CleanedPhoneName中存在字典未覆盖的iPhone机型,映射会得到NaN,可以用fillna()保留原电池值:

dfClean2.loc[dfClean2['CleanedPhoneName'].str.contains('iPhone', case=False), 'Battery'] = dfClean2['CleanedPhoneName'].map(iphone_dict).fillna(dfClean2['Battery'])

内容的提问来源于stack exchange,提问作者Austin Kwak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 12:56:30