Для L oop и Истина значение Серии неоднозначно - PullRequest
1 голос
/ 28 апреля 2020

Просматривал ответы на подобные запросы здесь, но все еще не уверен. Код ниже производит:

     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().

Ответы [ 2 ]

2 голосов
/ 28 апреля 2020

В pandas вы можете избегать петель , если это возможно. Ваше решение должно быть заменено на boolean mask на ~ для инвертирования вместо == 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)

Но так как цифра c имеет только числа Я думаю, что маска здесь не нужна, также регулярное выражение должно быть объединено | для or, regex=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
0 голосов
/ 28 апреля 2020

Замените это:

if df[0]['SubconPartNumber1'].str.isdigit() == False :

на это:

if df[0]['SubconPartNumber1'].str.isdigit().empty:

Есть и другие методы, кроме empty, но я думаю, что это даст вам то, что вы хотите.

...