Как изменить и преобразовать значение в строке в столбце DataFrame?
Дана таблица:
import pandas as pd
df3 = pd.DataFrame({'Name':['020245D5Z022/55D0', '92014947Q62500/29', '02025727Y052D0/55', '320247528043/01S0'], 'Sum': [80, 100, 200, 300]})
print(df3)
- Если '/' на 12 позиции в значении, тогда нужно удалить и получить
020245D5Z02255D0. - А если '/' на 14 позиции в значении, тогда нужно
92014947Q62500/29преобразовать иначе, левые 11 символов + правые два символа + два символа на позиция 15 и 16", т.е. в нашем случае это92014947Q6252900.
df3.loc[df3.Name.str[12] == '/']
df3.loc[df3.Name.str[14] == '/']
Ответ, должен получиться такой:
Name Sum
0 020245D5Z02255D0 80
1 92014947Q6252900 100
2 02025727Y05255D0 200
3 32024752804301S0 300
Ответы (2 шт):
Автор решения: strawdog
→ Ссылка
Вероятно, как-нибудь так:
mask1 = df3["Name"].str.find("/") == 12
mask2 = df3["Name"].str.find("/") == 14
df3.loc[mask1, "Name"] = df3.loc[mask1, "Name"].str.replace("/","")
df3.loc[mask2, "Name"] = df3.loc[mask2, "Name"].replace(to_replace="(.+)(.{2})/(.+)", value=r"\1\3\2", regex=True)
Результат:
Name Sum
0 020245D5Z02255D0 80
1 92014947Q6252900 100
2 02025727Y05255D0 200
3 32024752804301S0 300
Автор решения: MaxU
→ Ссылка
import numpy as np
df3["Name"] = np.where(df3["Name"].str[12] == "/",
df3["Name"].str.replace("/", "", regex=False),
df3["Name"].str.replace(r"(.+)(.{2})/(.+)", r"\1\3\2"))
результат:
In [47]: df3
Out[47]:
Name Sum
0 020245D5Z02255D0 80
1 92014947Q6252900 100
2 02025727Y05255D0 200
3 32024752804301S0 300