Python中使用If else条件处理Pandas DataFrame列取值的问题
正确实现方案
推荐:Pandas向量化实现(无循环,性能最优)
Pandas优先推荐使用向量化运算处理数据,相比循环性能高很多,实现代码如下:
import pandas as pd import numpy as np # 构造示例DataFrame,你实际使用时替换为自己的df即可 data = { 'NE Name': ['ABC', 'Site1&site2', 'site3&site4', 'site5', 'site6&site8'], 'Subrack': ['master', 'site1', 'site3', 'master', 'site6'] } df = pd.DataFrame(data) # 核心逻辑:满足条件返回第1列,否则返回第0列 df['result'] = np.where( df.iloc[:, 0].str.contains('&', regex=False), # regex=False避免特殊字符被识别为正则 df.iloc[:, 1], df.iloc[:, 0] ) # 打印结果 print(df['result'])
运行后输出的结果完全符合需求:
0 ABC 1 site1 2 site3 3 site5 4 site6 Name: result, dtype: object
修正后的循环实现版本
如果你需要坚持使用循环逻辑,修正后的可运行代码如下:
for i in range(len(df)): ne_name = df.iloc[i, 0] if '&' in ne_name: print(df.iloc[i, 1]) else: print(ne_name)
原代码问题说明
- 循环语法错误:
for i in :没有传入迭代范围,需要用range(len(df))遍历所有行索引 - 方法调用错误:
str.contains是Pandas Series的专属方法,不能作用在单个字符串上,单个字符串判断包含关系直接用in运算符即可 - 条件判断逻辑错误:
all()用于对多元素布尔值做与运算,单个值无需调用;布尔值True和字符串'TRUE'不相等,导致原有判断条件永远不成立
内容的提问来源于stack exchange,提问作者Salim
相关产品推荐
相关产品推荐

