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

解决DataFrame中判断字符串前3位为PRE并新增列的代码失效问题

问题排查与解决方案

你的代码存在两个核心问题:

  1. df1['NOTES'].astype(str)没有重新赋值给原列,这行代码不会修改DataFrame里的NOTES列类型,相当于无效操作。
  2. 循环中每次都对整个new列赋值,导致最后所有行的new值都会被最后一次循环的结果覆盖,无法实现逐行判断的需求。

修正后的方案(推荐使用向量化操作,效率更高)

import pandas as pd
    
df1 = pd.DataFrame({'NOTES': ["PREPAID_HOME_SCREEN_MAMO", "SCREEN_MAMO",
                              "> Unable to connect internet>4G Compatible>Set",
                              "No>Not Barred>Active>No>Available>Others>",
                              "Internet Not Working>>>Unable To Connect To"]})
# 确保NOTES列为字符串类型(重新赋值生效)
df1['NOTES'] = df1['NOTES'].astype(str)
# 用str.startswith直接判断前缀,再映射为yes/No
df1['new'] = df1['NOTES'].str.startswith('PRE').map({True: 'yes', False: 'No'})
    
print(df1)

另一种逐行处理的方案(用apply)

如果习惯用逐行逻辑,也可以用apply实现:

import pandas as pd
    
df1 = pd.DataFrame({'NOTES': ["PREPAID_HOME_SCREEN_MAMO", "SCREEN_MAMO",
                              "> Unable to connect internet>4G Compatible>Set",
                              "No>Not Barred>Active>No>Available>Others>",
                              "Internet Not Working>>>Unable To Connect To"]})
df1['NOTES'] = df1['NOTES'].astype(str)

# 定义判断函数
def check_prefix(note):
    return 'yes' if note[:3] == 'PRE' else 'No'

# 应用到每一行
df1['new'] = df1['NOTES'].apply(check_prefix)
    
print(df1)

运行后,第一行的new值会是yes,其余行都是No,符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:01:08