Как найти и найти синтаксическую ошибку, а затем исправить синтаксис, добавив в строку? - PullRequest
1 голос
/ 14 мая 2019

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

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

df.loc[~df['Syntax'].str.contains('x')] = '1x'+ 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')] = '1x'+ 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 ]

2 голосов
/ 14 мая 2019

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

df.Syntax=np.where(df.Syntax.str.contains('x'),df.Syntax,'1x'+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
1 голос
/ 14 мая 2019

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

df.update('1x' + 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
0 голосов
/ 14 мая 2019

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

n=df.Syntax.str.extract(r'(\d{1,}x)?(\d{1,})')
n[0] =n[0].fillna('1x')
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
...