我的資料框中的一列具有以下以兩種方式之一格式化的活動貢獻資料:
JOHN A. DONOR1234 W ROAD ST CITY, STATE 56789
和
JANE M. DONOR
1234 W ROAD ST
CITY, STATE 56789
我想將此列分成兩部分。第一列應該是捐贈者的名字。第二列應該是地址。
目前,我正在使用以下regex代碼來嘗試完成此操作:
url = ("http://www.voterfocus.com/CampaignFinance/candidate_pr.php?op=rp&e=8&c=munmiamibeach&ca=64&sdc=116&rellevel=4&dhc=774&committee=N")
dfs = pd.read_html(url)
df = dfs[0]
df['Contributor'].str.split(r'\d\d?', expand=True)
但是不是在第一場比賽后拆分并退出 - 正如我打算的那樣 - 正則運算式似乎繼續匹配和拆分。我的輸出應該是這樣的:
Col1 Col2
JOHN A. DONOR 1234 W ROAD ST CITY, STATE 56789
uj5u.com熱心網友回復:
它可能比那簡單得多。您可以使用字串方法。例如,我認為這是您想要的行為:
import pandas as pd
s = """JOHN A. DONOR
1234 W ROAD ST
CITY, STATE 56789"""
df = pd.DataFrame([s], columns=["donors"])
df.donors.str.split("\n", 1, expand=True)
輸出:
0 1
0 JOHN A. DONOR 1234 W ROAD ST\nCITY, STATE 56789
uj5u.com熱心網友回復:
拆分方案
您可以使用
df['Contributor'].str.split(r'(?<=\D)(?=\d)', expand=True, n=1)
該(?<=\D)(?=\d)正則運算式發現一個非數字字符(之間的位置\D)和一個數字字符(\d),拆分串有和僅執行此操作一次(由于n=1)。
替代方案
您可以匹配并捕獲直到第一個數字的名稱,然后使用
df['Contributor'].str.extract(r'(?P<Name>\D*)(?P<Address>\d.*)', expand=True)
# => Name # Address
# 0 Contributor CHRISTIAN ULVERT 1742 W FLAGLER STMIAMI, FL 33135
# 1 Contributor Roger Thomson 4271 Alton Miami Beach , FL 33140
# 2 Contributor Steven Silverstein 691 West 247th Street Bronx , NY 10471
# 3 Contributor Cathy Raduns 691 West 247th Street Bronx, NY 10471
# 4 Contributor Asher Raduns-Silverstein 691 West 247th StreetBRONX, NY 10471
該(?P<Name>\D*)(?P<Address>\d.*)模式的裝置
(?P<Name>\D*)- 組“名稱”:除數字外的零個或多個字符(?P<Address>\d.*)- 組“地址”:一個數字,然后是除換行符以外的任何零個或多個字符。
如果字串中有換行符,則(?s)在模式的開頭添加,即r'(?s)(?P<Name>\D*)(?P<Address>\d.*)'.
請參閱正則運算式演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/336088.html
上一篇:我想要一個基于條件的列名串列,在一個單獨的列中以排序的形式
下一篇:如何隨機填充分類資料的NaN?
