Професионална програма
Loading...
NikolaKalev avatar NikolaKalev 1 Точки

Pandas "str.extract" how exactly works

Здравейте, някой може да даде малко повече инфо как точно работи функцията "str.extract(patflags=0expand=None)"? По-точно частта "parts = tb["sex_and_age"].str.extract("(\D)(\d+)(\d{2})", expand = True)" от лекцията "Data Tidying and Cleaning" -> намира се на slide 9. Благодаря предварително :) 

0
Data Science
TeodorStefanovPld avatar TeodorStefanovPld 1276 Точки

така значи string extract или както и да се нарече, е  функция/свойство на поредица от символи,подаваш  някаква поредица от символи и после на базата на някакво условие взимаш част от нея.

Този пример които гледаш от 9 слайд е с regex. Като regex означава регулярен израз в случая ("(\D)(\d+) този израз означава - вземи ми някаква цифра от началото като може да е една или повече. D-показва на израза да търси число (\d+)(\d{2} му казва че трябва да са точно 2 числа

И в случая какво се случва примерно имаш колонка с m15  - минаваш с string.extract с това подадено условие и тои  интерпретатора гледа. Аха тук имам 1 буква и 2 числа и ти ги разделя като получаваш 2 колони : m и 15.

 

Сега това е обширна тема,особено regex. Това което ти трябва да разбереш е че, string.extract е метод за обработка на поредица от символи на база на някакво условие. Това е едно от основните неща в  програмирането. Има много начини и неща това да се направи.

Ето ти друг пример : примерно string AAAADDDDCCCCBBBB

искаш да вземеш примерно само първите четири символа:

string.extract(len(4)) и ще получиш АААА

може би бъркам малко синтаксиса но това е логиката,сорри но Python не ми е основния език,тепърва му свиквам и на него :Д

това другото което вижваш като pat,flags,expand - това са свойства на метода string.extract  в случая от слайда

pat= ("(\D)(\d+)(\d{2})" това ти е условието по което ще разделяш стринга, expand=true това означава че като получиш резултата да ти го създаде отделно а не на място и тн.това са вече малки подробности.

Стана малко дълго обяснение.Ако имаш въпроси питай regex е едно от най-неприятните неща в програмирането. regex и datatime :D  2та малки ужаса.

0
19/12/2017 06:44:43
NikolaKalev avatar NikolaKalev 1 Точки

Здравей и благодаря за подробната информация. Може ли малко повече инфо за частта "(\D)(\d+)” и  “(\d+)(\d{2})” и как точно функционира, какво означава малкото/голямото D, наклонената черта, плюсовете, къдравите скоби и кое как се използва, т.е. как мога да науча как функционират?

0
TeodorStefanovPld avatar TeodorStefanovPld 1276 Точки

 "(\D)(\d+)” и  “(\d+)(\d{2}) значи това как функционират е цяла наука. Вярвай ми просто напиши regex и ще ти излезе много информация. Реално в случая \D показва че търсиш число като d+ показва че трябва да е едно или повече. а \d+)(\d{2})  казва на интерпретатора като намериш таква поредица от числа едно или повече вземи само 2 (\d{2})  това показва че като намериш числата взимаш само 2те. тоест :

имаш примерно: m015 както е на тая лекция като гледаш записа ще видиш че Данчо променя ръчно името на колоните на m0015 m 1530 и тн.. и като пусне този регекс ще получи следните 2 групи 00 15 и 15 30 и  тн.. и после вече почваш да правиш с тях каквото искаш. 

Сега да ти обеснявам подробно ще се омагъосаш,вярвай ми дори опитни програмисти заобикалят регекс когато могат. да полезен е но е идиотски направен. Примерно на programng fundamentals моя изпит regex задачата не я направих знаех как но ме мързеше.После на изпита по mysql db имаше една задача решаваше се ок с регекс но тои отказа да сработи беше подобна на този пример пак търсехме числа но от 0-9 и откриваше всичките без 9 :Д не ме питай защо не работеше,идея си нямам и stackoverflow да питаш и тои ще ти каже че трябва да работи. Честно казано за нивото и целта на курса не ти трябва да забиваш в regex. има толкова много неща. ^ -този символ може да е,начало на стринг или отрицание  примерно горе ако имаше (\^D) щеше да ти търси букви а не числа и тн и тн. $-този пък означава край на стринг и там да търсиш нещо. Мазало голямо е datetime и regex са кошмар ако забиеш в тях може с дни да незнаеш какво се случва.За data science това не ти трябва. 

Ще ти дам пример колоната м015 може да се раздели и като стринг примерно можеше да направиш  name(името на колоната-m015) = len(m015,-2) и това ще ти върне  name=15

string има и функции като skip take и тн. При skip му казваш ти си поредица от символи но изпусни няколко които са число int, И примерно казваш name=m015,skip(2) и това ще върне 15. 

общо взето това е логиката,сега синтаксиса сигурно не е правилен но тои се намира в нета или в документацията на езика/технологията.Има много сайтове за тестване на регулярни изрази https://regexr.com/ ,https://regex101.com/ тези 2та са доста популярни но е мъка :Д и всеки програмен език си има регекс с някакви особености...

ако искаш тук в форума съм оставил skype и фб, аз съм в една от групите които се организирахме която Данчо спомена на лекцията вчера ще те включим в събиранията.Примерно довечера имаме едно след 18 часа.

ps. Не намерих лично съобщение опция на форума :Д май няма :Д или още спя рано сутринта.

0
20/12/2017 06:32:38
TeodorStefanovPld avatar TeodorStefanovPld 1276 Точки

https://www.dataquest.io/blog/regular-expressions-data-scientists/ ето намерих и една блог статия точно за pandas кое и как.

0
NikolaKalev avatar NikolaKalev 1 Точки

Намерих едно видео в youtebe, което ми свърши доста добра работа, който има интерес може да го погледне https://www.youtube.com/watch?v=sZyAn2TW7GY

0
27/12/2017 19:40:17
NikolaKalev avatar NikolaKalev 1 Точки

Намерих едно видео в youtebe, което ми свърши доста добра работа, който има интерес може да го погледне https://www.youtube.com/watch?v=sZyAn2TW7GY

0
27/12/2017 19:38:17