Как применить пользовательскую функцию регулярного выражения к столбцу в фрейме данных Python - PullRequest
0 голосов
/ 13 апреля 2020

Я искал последние два дня на этом сайте и в Google, и я не могу понять это. У меня есть датафрейм с 4 столбцами. Я чувствую, что это так легко, что мне не хватает. Вот моя функция:

  def zip_code(zip):
     if re.match('^[0-9]{5}(?:-[0-9]{4})?$',zip):
    #zip = 5
        return zip
    else:
        return ''

информация о моем клиенте

   customer_info = (['John', 'Summers', '22960', '434-305-6600'], 
            ['Josh', 'Williams', '40143', '270-555-1544'],
            ['Jim', 'Roberson', '21801','555-555-5555'],
            ['John', 'Adams', '223211143', '4444444444']

Это мои различные попытки заставить его работать

   dataframe = pd.DataFrame(customer_info,columns = ['First','Last','Zip','Phone'])

   #dataframe['Zip'] = dataframe['Zip'].apply(zip_code())
   #dataframe['Zip'] = dataframe['Zip'].apply(zip_code(dataframe['Zip']))

   #dataframe['Zip'] = dataframe['Zip'].apply(lambda x: re.match('^[0-9]{5}(?:-[0-9]{4})?$',x))

   #dataframe.Zip.apply(lambda x: zip_code(x))
   #dataframe['Zip'].apply(zip_code)

   print(dataframe)
   zipcode = zip_code('22960')
   print(zipcode)

Что я пытаюсь сделать запустить проверку столбца почтового индекса «Zip». Если это почтовый индекс, который соответствует ##### или ##### - ####, он вернет почтовый индекс. В противном случае он вернет пустое пространство. Я проверил функцию почтового индекса, и она работает как ожидалось. Однако я не могу понять, как передать весь столбец Zip через функцию zip_code. Каждый раз, когда я набираю zip_code (), он запрашивает переменную. Практически все закомментированные строки - это строки, которые я нашел, просматривая этот сайт, но это мне не помогло. Спасибо за любую помощь, вы можете предоставить!

1 Ответ

0 голосов
/ 13 апреля 2020

Это может работать

import pandas as pd
customer_info = (['John', 'Summers', '22960', '434-305-6600'], 
            ['Josh', 'Williams', '40143', '270-555-1544'],
            ['Jim', 'Roberson', '21801','555-555-5555'],
            ['John', 'Adams', '223211143', '4444444444'])
dataframe = pd.DataFrame(customer_info,columns = ['First','Last','Zip','Phone'])
dataframe["validZip"] = dataframe.Zip.str.extract(r'^([0-9]{5}(?:-[0-9]{4})?)$').fillna('')

Ваша версия также работает

import pandas as pd
customer_info = (['John', 'Summers', '22960', '434-305-6600'], 
            ['Josh', 'Williams', '40143', '270-555-1544'],
            ['Jim', 'Roberson', '21801','555-555-5555'],
            ['John', 'Adams', '223211143', '4444444444'])
dataframe = pd.DataFrame(customer_info,columns = ['First','Last','Zip','Phone'])


def zip_code(zip):
    if re.match('^[0-9]{5}(?:-[0-9]{4})?$',zip):
        return zip
    else:
        return ''

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