Преобразование строк датафрейма
Из Яндекс.Метрика получаю DF (здесь сокращенная часть таблицы):
| Дата | Номер заказа | Источник |
|---|---|---|
| 2023-06-02 | ['6857886514054418'] | cityads |
| 2023-06-03 | ['6858636614093599','6858634464093342'] | cityads |
| 2023-06-03 | ['6858887364118002'] | 2gis |
| 2023-06-04 | ['6858025994065429'] | yandex |
| 2023-06-05 | ['6858706704101675','6858722124103264','6858887364118056'] | yandex |
Пытаюсь в поле "Номер заказа" убрать скобки с апострофами и запятыми и перенести значения, указанные через запятую, на новую строку с сохранением соответствующих дат и источников. Чтобы стало так:
| Дата | Номер заказа | Источник |
|---|---|---|
| 2023-06-02 | 6857886514054418 | cityads |
| 2023-06-03 | 6858636614093599 | cityads |
| 2023-06-03 | 6858634464093342 | cityads |
| 2023-06-03 | 6858887364118002 | 2gis |
| 2023-06-04 | 6858025994065429 | yandex |
| 2023-06-05 | 6858706704101675 | yandex |
| 2023-06-05 | 6858722124103264 | yandex |
| 2023-06-05 | 6858887364118056 | yandex |
Единственное, что получается, так это удалить скобки, используя код:
data['Номер заказа']=data['Номер заказа'].str.strip('[]')
Однако в ячейках остаются также по несколько значений, выделенных апострофами и разделенных запятыми.
Как начинающий специалист по Python прошу Сообщество помочь мне реализовать задуманную задачу.
Ответы (2 шт):
Автор решения: DiMithras
→ Ссылка
import pandas as pd
df = pd.read_clipboard()
df.iloc[:, 1] = df.iloc[:, 1].str.replace("\[|\]|'", '', regex=True)
df.iloc[:, 1] = df.iloc[:, 1].str.split(',').tolist()
df = df.explode('Номер заказа')
print(df)
Вывод:
Дата Номер заказа Источник
0 2023-06-02 6857886514054418 cityads
1 2023-06-03 6858636614093599 cityads
1 2023-06-03 6858634464093342 cityads
2 2023-06-03 6858887364118002 2gis
3 2023-06-04 6858025994065429 yandex
4 2023-06-05 6858706704101675 yandex
4 2023-06-05 6858722124103264 yandex
4 2023-06-05 6858887364118056 yandex
Автор решения: strawdog
→ Ссылка
from ast import literal_eval
df["Номер заказа"] = df["Номер заказа"].apply(literal_eval)
df = df.explode("Номер заказа")