首页 > 解决方案 > For循环和一个系列的真值是不明确的

问题描述

在这里查看了类似查询的答案,但仍然不确定。下面的代码产生:

     for i in range(len(df)):
            if df[0]['SubconPartNumber1'].str.isdigit() == False :
                df['SubconPartNumber1'] = df['SubconPartNumber1'].str.replace(',', '/', regex = True)
                df['SubconPartNumber1'] = df['SubconPartNumber1'].str.replace(r"\(.*\)-", '/', regex = True)
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

标签: pythonpandasseriesvalueerror

解决方案


在熊猫中,如果可能的话,你可以避免循环。您的解决方案应替换为boolean maskwith ~for invert== False并传递给DataFrame.loc

m = df['SubconPartNumber1'].str.isdigit()
df.loc[~m, 'SubconPartNumber1'] = df.loc[~m, 'SubconPartNumber1'].str.replace(',', '/', regex = True).str.replace(r"\(.*\)-", '/', regex = True)

但是因为 numeric 只有数字我认为这里不需要掩码,所以正则表达式也应该加入|for orregex=True是默认参数,所以应该省略:

df = pd.DataFrame({'SubconPartNumber1':['345','aaa,','(bbb)-ccc']})
print (df)
  SubconPartNumber1
0               345
1              aaa,
2         (bbb)-ccc

df['SubconPartNumber1'] = df['SubconPartNumber1'].str.replace(r",|\(.*\)-", '/')
print (df)
  SubconPartNumber1
0               345
1              aaa/
2              /ccc

推荐阅读