Как поставить символ в значении столбца на нулевую позицию значения при выполнении определенного условия?
У меня есть DataFrame
d = {"city":['Лондон', 'Краков', 'Дамаск'], "year": ['50 н. е.','990', '2500 год до н. э.']}
df = pd.DataFrame(d, index=[1, 2, 3])
| city | year | |
|---|---|---|
| 1 | Лондон | 50 н. е. |
| 2 | Краков | 990 |
| 3 | Дамаск | 2500 год до н. э |
Нужно заменить 'до н. э' на '-' и поставить его на нулевую позицию значения, а все остальные не числовые символы удалить.
То есть ожидаю получить:
| city | year | |
|---|---|---|
| 1 | Лондон | 50 |
| 2 | Краков | 990 |
| 3 | Дамаск | -2500 |
Знаю как удалить ненужные символы, но как поставить символ в начало, не понимаю.
re_express = re.compile('до н. э.')
df['year'] = df['year'].replace(re_express, '-')
re_express = re.compile('[а-яА-ЯёЁA-Za-z.]|\s')
df['year'] = df['year'].replace(re_express, '')
| city | year | |
|---|---|---|
| 1 | Лондон | 50 |
| 2 | Краков | 990 |
| 3 | Дамаск | 2500- |
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Попробуйте так:
res = (pd.to_numeric(df["year"].str.extract(r".*?(\d+).*")[0], errors="coerce")
* np.where(df["year"].str.contains(r"до н. э."), -1, 1))
результат
In [49]: res
Out[49]:
1 50
2 990
3 -2500
Name: 0, dtype: int64