簡體   English   中英

如何將自定義正則表達式 function 應用於 dataframe Python 中的列

[英]How do I apply a custom regex function to column in dataframe Python

過去兩天我一直在這個網站和谷歌上搜索,但我無法弄清楚。 我有一個 4 列的 dataframe。 我覺得這是一件很容易的事情,我錯過了。 這是我的 function:

  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 代碼,它將返回 zip 代碼。 否則它將返回一個空白空間。 我已經測試了 zip 代碼 function 並且它按預期工作。 但是,我不知道如何通過 zip_code function 傳遞整個 Zip 列。 每次我輸入 zip_code() 時,它都會詢問變量。 幾乎所有被注釋掉的行都是我在瀏覽此站點時發現的行,但這對我沒有幫助。 感謝您提供任何幫助!

這可以工作

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM