Как заставить условное форматирование работать в панд?

#python #pandas #dataframe

Вопрос:

У меня есть следующий df:

 Invoice number
.5
.3
02
 

Я хочу заменить».», потому что оно записывается неправильно. Это успешно выполняется с помощью следующего кода:

 df['Invoice number'] = df['Invoice number'].astype(str).str.replace(r"[^a-zA-Z0-9$?!]", '')
 

однако перед числом ставится 0, что приводит к следующему df:

 Invoice number
05
03
02
 

Я попробовал следующее

 for i, row in df.iterrows():
    if str(i).startswith('.'):  
        df.loc[i, 'KvK'] = df['KvK'].astype(str).str.replace(r"[^a-zA-Z0-9$]", '')
        df.loc[i,'Factuurnummer'] = df['Factuurnummer'].astype(str).str.replace(r"[^a-zA-Z0-9$]", '')
 

Однако это не работает. Ничего не происходит.

Я хотел бы получить следующий результат:

 invoice # 
5
3
02
 

Комментарии:

1. Являются ли значения в столбце целыми или строковыми?

2. для номера счета-фактуры это строка

3. Попробуйте пройтись по столбцу и удалить первый символ/индекс строки. Что-то вроде for x in df['Invoice Number']: x = x[1:0]

Ответ №1:

вы можете сделать это с помощью маски, созданной series.str.startswith и series.mask или np.where :

 s = df['Invoice number']
s.mask(s.str.startswith('.'),s.str.replace(".",""))
 

Или, если вам удобно использовать regex шаблон, вы также можете использовать:

 df['Invoice number'].str.replace(r'^.', '')
 

 0     5
1     3
2    02
Name: Invoice number, dtype: object
 

Комментарии:

1. Спасибо @anky! Это работает ! У вас есть какие-нибудь идеи, почему мой код не работает? Для того, чтобы научиться

2. @Max Мне не слишком удобно использовать шаблоны регулярных выражений, особенно когда можно избежать шаблонов , поэтому я не могу комментировать то же самое.