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

如何在Pandas中将含Fax的Phone字段内容移至Fax列并截断原字段?

解决Pandas TypeError: unhashable type: 'Series' 及数据迁移需求

错误根源

你用了df[df['Phone'].str.contains("Fax") == True, "Fax"]这种错误的索引写法——Pandas不允许直接用逗号分隔行条件和列名来索引DataFrame,布尔Series属于不可哈希类型,才会抛出这个报错。

正确实现方案

步骤1:生成有效掩码

先创建布尔掩码,标记Phone列包含"Fax"的行,同时处理None值避免报错:

mask = df['Phone'].str.contains('Fax', na=False)

na=False是关键,它会把Phone列的None值直接判定为False,防止str.contains返回NaN导致索引异常。

步骤2:迁移数据到Fax列

用.loc索引器精准定位行和列,完成赋值:

df.loc[mask, 'Fax'] = df.loc[mask, 'Phone']

步骤3:清空原Phone字段

把符合条件的Phone列值设为None:

df.loc[mask, 'Phone'] = None

完整可运行代码

import pandas as pd

df = pd.DataFrame([
{'Phone': 'Fax(925) 482-1195', 'Fax': None},
{'Phone': 'Fax(406) 226-0317', 'Fax': None},
{'Phone': 'Fax+1 650-383-6305', 'Fax': None},
{'Phone': 'Phone(334) 585-1171', 'Fax': 'Fax(334) 585-1182'},
{'Phone': None, 'Fax': None},
{'Phone': 'Phone(334) 585-1171', 'Fax': 'Fax(334) 585-1176'}]
)

# 生成掩码
mask = df['Phone'].str.contains('Fax', na=False)
# 迁移Fax数据
df.loc[mask, 'Fax'] = df.loc[mask, 'Phone']
# 清空原Phone字段
df.loc[mask, 'Phone'] = None

print(df)

最终输出

Phone                  Fax
0                None  Fax(925) 482-1195
1                None  Fax(406) 226-0317
2                None  Fax+1 650-383-6305
3  Phone(334) 585-1171  Fax(334) 585-1182
4                None                 None
5  Phone(334) 585-1171  Fax(334) 585-1176

核心注意点

  • Pandas中必须用.loc(标签索引)或.iloc(位置索引)来同时定位行和列,不能用df[行条件, 列名]的语法。
  • 处理含空值的字符串列时,一定要给str.contains加上na参数,否则空值会导致掩码失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:15:34