Как добавить цифру к каждому элементу списка?
Делаю импорт из .xlsx Получаю вот такой df:
my.dtypes
Период datetime64[ns]
Телефон object
dtype: object
Сам датафрейм выглядит вот так:
Период Телефон
0 2021-01-01 8312333666; 9101054581; 8312617706
1 2021-01-08 9307167823
2 2021-01-08 9307167823
3 2021-01-11 9200211539; 9200239899; 9519012568
4 2021-01-11 9108917638
Каким образом можно добавить к каждому номеру в каждом списке цифру '8', чтобы получилось вот так:
Период Телефон
0 2021-01-01 88312333666; 89101054581; 88312617706
1 2021-01-08 89307167823
2 2021-01-08 89307167823
3 2021-01-11 89200211539; 89200239899; 89519012568
4 2021-01-11 89108917638
Делаю вот так, но добавляет только первому элементу в списке:
country_code = "8"
my['Телефон'] = country_code + my['Телефон'].map(str)
Ответы (2 шт):
Автор решения: MaxU
→ Ссылка
Исходный фрейм:
In [138]: df
Out[138]:
phone
0 [8312437527, 9023099753]
1 NaN
2 NaN
3 [8312477313, 8314148820, 9202539919]
4 [8312477313, 8314148820, 9202539919]
решение:
df.loc[df["phone"].notna(), "phone"] = \
(df
.loc[df["phone"].notna(), "phone"]
.map(lambda x: ["8" + y.lstrip() for y in x]))
результат:
In [140]: df
Out[140]:
phone
0 [88312437527, 89023099753]
1 NaN
2 NaN
3 [88312477313, 88314148820, 89202539919]
4 [88312477313, 88314148820, 89202539919]
Автор решения: MaxU
→ Ссылка
Решение для измененного вопроса (в изначальной версии данные были представлены списками, а не CSV строками):
In [154]: df
Out[154]:
phone
0 8312333666; 9101054581; 8312617706
1 9307167823
2 NaN
3 9200211539; 9200239899; 9519012568
In [155]: df["phone"] = ("8" + df["phone"].dropna().str.split(";\s*").explode()).groupby(level=0).apply(lambda x: "; ".join(x))
In [156]: df
Out[156]:
phone
0 88312333666; 89101054581; 88312617706
1 89307167823
2 NaN
3 89200211539; 89200239899; 89519012568