#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 Мне не слишком удобно использовать шаблоны регулярных выражений, особенно когда можно избежать шаблонов , поэтому я не могу комментировать то же самое.