如何使用.startswith()方法在pandas DataFrame中创建新变量
错误原因分析
- 第一个写法报错的原因:
- 用
df(xxx)的写法是把DataFrame对象当成函数调用了,pandas中条件筛选需要用方括号[],不是圆括号 - 没有用
.str访问器调用字符串方法,直接写subj.startswith无法识别subj是df的列,也无法对整列做字符串匹配 - 条件判断里的
mean没有指定是df的mean列,会被识别为未定义的变量
- 用
- 第二个写法无报错但无效果的原因:
直接对DataFrame做遍历,默认遍历的是列名而非行值,所以循环里的subj实际是'subj'、'mean'两个列名字符串,自然无法匹配到a_subj开头的内容,所以赋值逻辑不会执行。
正确实现方案
如果你的需求是单独将符合条件的mean值存入变量mean_a,可以直接用pandas的条件筛选:
# 筛选subj列以'a_subj'开头的行,提取mean列的值,得到的是Series类型 mean_a = df.loc[df['subj'].str.startswith('a_subj'), 'mean'] # 如果你确定符合条件的只有一行,要直接得到标量数值,可加.iloc[0] mean_a = df.loc[df['subj'].str.startswith('a_subj'), 'mean'].iloc[0]
如果你需要给原DataFrame新增mean_a列,对应np.where的正确写法如下:
import numpy as np df['mean_a'] = np.where(df['subj'].str.startswith('a_subj'), df['mean'], '')
内容的提问来源于stack exchange,提问作者r.rodrigues18
相关产品推荐
相关产品推荐

