Как найти и найти синтаксическую ошибку, а затем исправить синтаксис, добавив в строку?

Если в строке в строке отсутствует синтаксис или неправильный синтаксис, я хотел бы найти эту строку и отредактировать / исправить этот синтаксис для целей сортировки.

Что я придумала до сих пор:

df.loc[~df['Syntax'].str.contains('x')] = Ƈx'+ df['Syntax'].astype(str)

выдает ошибку:

ValueError: Must have equal len keys and value when setting with an iterable


df = pd.read_excel('raw_data')

df.loc[~df['Syntax'].str.contains('x')] = Ƈx'+ df['Syntax'].astype(str)

df.sort_values('Syntax', inplace = True)

print (df)

Пункт 3 является типичной синтаксической ошибкой:

Item    Syntax  Date
1   1x12    5/14/2019
2   4x16    5/14/2019
3   32  5/14/2019
4   3x10    5/14/2019

И я хочу найти тех, у кого только номер, и добавить «1x» перед ним. Вывод будет выглядеть так:

Item    Syntax  Date
1   1x12    5/14/2019
2   4x16    5/14/2019
3   1x32    5/14/2019
4   3x10    5/14/2019

Всего 3 ответа


Использование np.where с str.contains

df.Syntax=np.where(df.Syntax.str.contains('x'),df.Syntax,Ƈx'+df.Syntax)
df
Out[48]: 
   Item Syntax       Date
0     1   1x12  5/14/2019
1     2   4x16  5/14/2019
2     3   1x32  5/14/2019
3     4   3x10  5/14/2019

Как насчет использования update и isnumeric

df.update(Ƈx' + df.Syntax[df.Syntax.str.isnumeric()])


Out[1460]:
   Item Syntax       Date
0     1   1x12  5/14/2019
1     2   4x16  5/14/2019
2     3   1x32  5/14/2019
3     4   3x10  5/14/2019

Как это возможно:

n=df.Syntax.str.extract(r'(d{1,}x)?(d{1,})')
n[0] =n[0].fillna(Ƈx')
df.Syntax=n[0]+n[1]
print(n)
print(df)

   Item Syntax       Date
0     1   1x12  5/14/2019
1     2   4x16  5/14/2019
2     3     32  5/14/2019
3     4   3x10  5/14/2019
    0   1
0  1x  12
1  4x  16
2  1x  32
3  3x  10
   Item Syntax       Date
0     1   1x12  5/14/2019
1     2   4x16  5/14/2019
2     3   1x32  5/14/2019
3     4   3x10  5/14/2019

Есть идеи?

10000