Разделите несколько столбцов по цифрам c или буквам c - PullRequest
1 голос
/ 13 февраля 2020

Я работаю над разбиением нескольких столбцов по цифрам c или буквам c для столбцов v1 до v3, а затем возьму первую часть в качестве значений этого столбца. Например, 红岗花园12栋110房 будет разделен на 12, затем будет 红岗花园, 德福花园德福豪苑C4栋C5栋C4座1403房 будет разделен на C4 и 德福花园德福豪苑.

    id       v1                      v2                     v3
0    1      泥岗路             红岗花园12栋110房                    NaN
1    2     沙井街道                     万丰路                     东侧
2    3      中心区                    N15区          幸福·海岸10栋A座11A
3    4      龙岗镇                     南联村       长海雅园2栋D301D302房产
4    5    蛇口工业区                     兴华路  海滨花园多层海滨花园兰山楼06栋504房产
5    6      宝安路         松园·南九巷综合楼10栋103                    NaN
6    7      宝安路         松园·南九巷综合楼10栋203                    NaN
7    8      龙岗镇                     中心城            尚景华园12栋307房
8    9     沙河西路            西博海名苑1栋30C房产                    NaN
9   10  华侨城香山中路              天鹅堡三期P栋4D房                    NaN
10  11      布吉镇  德福花园德福豪苑C4栋C5栋C4座1403房                    NaN

Код, который я пробовал:

cols = ['v1', 'v2', 'v3']
df[cols] = df[cols].apply(lambda x: ''.join(re.compile(r'(\d+|\w+)')[0], x.str))

Вывод:

TypeError: ("'_sre.SRE_Pattern' object is not subscriptable", 'occurred at index v1')

Мой желаемый вывод будет выглядеть так:

    id       v1         v2             v3
0    1      泥岗路       红岗花园            NaN
1    2     沙井街道        万丰路             东侧
2    3      中心区        NaN          幸福·海岸
3    4      龙岗镇        南联村           长海雅园
4    5    蛇口工业区        兴华路  海滨花园多层海滨花园兰山楼
5    6      宝安路  松园·南九巷综合楼            NaN
6    7      宝安路  松园·南九巷综合楼            NaN
7    8      龙岗镇        中心城           尚景华园
8    9     沙河西路      西博海名苑            NaN
9   10  华侨城香山中路      天鹅堡三期            NaN
10  11      布吉镇   德福花园德福豪苑            NaN

Спасибо за вашу помощь.

1 Ответ

2 голосов
/ 13 февраля 2020

Вы можете удалить весь текст после первого символа ASCII alphanumeri c в столбцах, которые необходимо изменить:

cols = ['v1', 'v2', 'v3']
df[cols] = df[cols].apply(lambda x: x.str.replace(r'[A-Za-z0-9].*', ''))

Если ваши столбцы могут содержать многострочные тексты, используйте

r'(?s)[A-Za-z0-9].*'

, где (?s) встроенный модификатор также позволит . соответствовать символам разрыва строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...