Python Многократное назначение с помощью серии Panda - PullRequest
2 голосов
/ 20 марта 2020

Я хотел бы заполнить 2 пункта назначения pandas столбцов одновременно по соображениям производительности. Пример значения из исходного столбца: «42844 - Новости - BENL». Мне нужно извлечь «42844» и «Новости». Дополнительные значения можно игнорировать.

df["_site_id"], df["_site_name"], rest = df["website"].apply(lambda x: x.split(" - ", 2))

Я проверил этот код и получил 'ValueError: слишком много значений для распаковки (ожидается 3)'

Ответы [ 2 ]

3 голосов
/ 20 марта 2020

Для векторизованных строковых операций в pandas у вас есть str. Так что вместо этого вы можете использовать Series.str.split. Также, чтобы это назначение работало, вы должны сначала «развернуть» результирующий список в n новые столбцы, поэтому установите expand=True:

df["_site_id"], df["_site_name"], _ = df.website.str.split(' - ', 2, expand=True)

, что также можно сделать путем индексации списка столбцов. и разделение на lhs как:

*df[['_site_id', '_site_name']], _ = df.website.str.split(' - ', 2, expand=True)

Примечание : для работы нескольких назначений должно быть 3 столбцов в результате разделения website, в противном случае вы ValueError скажет, что для распаковки недостаточно значений.

1 голос
/ 20 марта 2020

Давайте сделаем str.split

df["website"].str.split(" - ", 2, expand=True)
#df=df.join(df["website"].str.split(" - ", 2, expand=True).rename(columns={0:'_site_id', 1:'_site_name'}))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...