解决DataFrame中判断字符串前3位为PRE并新增列的代码失效问题
问题排查与解决方案
你的代码存在两个核心问题:
df1['NOTES'].astype(str)没有重新赋值给原列,这行代码不会修改DataFrame里的NOTES列类型,相当于无效操作。- 循环中每次都对整个
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
相关产品推荐
相关产品推荐

