Регулярное выражение для переименования столбца путем удаления имени столбца - PullRequest
1 голос
/ 24 марта 2020

У меня есть df со многими столбцами, и каждый столбец имеет повторяющиеся значения, потому что его данные опроса. В качестве примера мои данные выглядят так:

df:

 Q36r9: sales platforms - Before purchasing a new car         Q36r32: Advertising letters - Before purchasing a new car
        Not Selected                                                                         Selected

Поэтому я хочу убрать текст из имен столбцов. Например, из первого столбца я хочу получить текст между ":" и "-". Таким образом, это должно быть так: «платформа продаж», а во второй части я хочу преобразовать значения столбцов, «выбранные» должны быть изменены с именем столбца и «Не выбран» как NaN

, поэтому желаемый результат будет выглядеть так:

sales platforms                                       Advertising letters
      NaN                                             Advertising letters

Отредактировано: Другая проблема, если у меня есть имя столбца, например:

Q40r1c3: WeChat - Looking for a new car - And now if you think again  - Which social media platforms or sources would you use in each situation?

Если я просто хочу получить что-то среднее между ":" и "-" , Следует извлечь "WeChat"

1 Ответ

2 голосов
/ 24 марта 2020

IIU C,

мы можем воспользоваться некоторым сопоставлением регулярных выражений и жадности, используя .*, который сопоставляет все между определенным шаблоном

import re

df.columns = [re.search(':(.*)-',i).group(1) for i in df.columns.str.strip()]

print(df.columns)

   sales platforms   Advertising letters 
0      Not Selected                  None

Редактировать:

с жадным сопоставлением мы можем использовать +?

+? Quantifier — Matches between one and unlimited times, as few times as possible, expanding as needed (lazy)

Q36r9: sales platforms - Before purchasing a new car    Q40r1c3: WeChat - Looking for a new car - And now if you think again - Which social media platforms or sources would you use in each situation?
0                                                       1


import re

[re.search(':(.+?)-',i).group(1).strip() for i in df.columns]

['sales platforms', 'WeChat']
...