第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何用大寫字母拆分 pandas 數(shù)據(jù)框中的字符串

如何用大寫字母拆分 pandas 數(shù)據(jù)框中的字符串

繁星淼淼 2023-08-15 18:40:19
我正在處理一些 NFL 數(shù)據(jù),數(shù)據(jù)框中有一列,如下所示:0         Lamar JacksonL. Jackson BAL1     Patrick Mahomes IIP. Mahomes KC2         Dak PrescottD. Prescott DAL3              Josh AllenJ. Allen BUF4         Russell WilsonR. Wilson SEA每個(gè)單元格中有 3 位信息 - FullName,ShortName我Team希望為其創(chuàng)建新列。預(yù)期輸出:         FullName                ShortName        Team0         Lamar Jackson           L. Jackson        BAL1         Patrick Mahomes II      P. Mahomes        KC2         Dak Prescott            D. Prescott       DAL3         Josh Allen              J. Allen          BUF4         Russell Wilson          R. Wilson         SEA我已經(jīng)設(shè)法得到了,Team但我不太確定如何在一行中完成所有這三個(gè)操作。我正在考慮通過(guò)查找前一個(gè)字符來(lái)分割字符串,fullstop但是出現(xiàn)了一些名稱,例如:Anthony McFarland Jr.A. McFarland PIT有多個(gè)句號(hào)。有人知道解決這個(gè)問(wèn)題的最佳方法嗎?謝謝!
查看完整描述

4 回答

?
qq_遁去的一_1

TA貢獻(xiàn)1725條經(jīng)驗(yàn) 獲得超8個(gè)贊

pandas Series str.extract 方法就是您所尋找的。該正則表達(dá)式適用于您提出的所有情況,盡管可能還有一些其他邊緣情況。


df = pd.DataFrame({

    "bad_col": ["Lamar JacksonL. Jackson BAL", "Patrick Mahomes IIP. Mahomes KC", 

                "Dak PrescottD. Prescott DAL", "Josh AllenJ. Allen BUF", 

                "Josh AllenJ. Allen SEA", "Anthony McFarland Jr.A. McFarland PIT"],

})


print(df)

                                 bad_col

0            Lamar JacksonL. Jackson BAL

1        Patrick Mahomes IIP. Mahomes KC

2            Dak PrescottD. Prescott DAL

3                 Josh AllenJ. Allen BUF

4                 Josh AllenJ. Allen SEA

5  Anthony McFarland Jr.A. McFarland PIT



pattern = r"(?P<full_name>.+)(?=[A-Z]\.)(?P<short_name>[A-Z]\.\s.*)\s(?P<team>[A-Z]+)"

new_df = df["bad_col"].str.extract(pattern, expand=True)

print(new_df)

               full_name    short_name team

0          Lamar Jackson    L. Jackson  BAL

1     Patrick Mahomes II    P. Mahomes   KC

2           Dak Prescott   D. Prescott  DAL

3             Josh Allen      J. Allen  BUF

4             Josh Allen      J. Allen  SEA

5  Anthony McFarland Jr.  A. McFarland  PIT

分解該正則表達(dá)式:

(?P<full_name>.+)(?=[A-Z]\.)(?P<short_name>[A-Z]\.\s.*)\s(?P<team>[A-Z]+)
  • (?P<full_name>.+)(?=[A-Z]\.) 捕獲任何字母,直到我們看到大寫字母后跟句號(hào)/句號(hào),我們使用前瞻 (?=...) 來(lái)不消耗大寫字母和句號(hào),因?yàn)樽址倪@一部分屬于短名稱

  • (?P<short_name>[A-Z]\.\s.*.)\s 捕獲一個(gè)大寫字母(玩家的第一個(gè)首字母),然后是句號(hào)(第一個(gè)首字母后面的句點(diǎn)),然后是一個(gè)空格(第一個(gè)首字母和姓氏之間),然后是所有字符,直到我們點(diǎn)擊空格(玩家的姓氏) )。該空間不包含在捕獲組中。

  • (?P<team>[A-Z]+) 捕獲字符串中所有剩余的大寫字母(最終成為玩家團(tuán)隊(duì))

您可能已經(jīng)注意到,我使用了由 (?Ppattern) 結(jié)構(gòu)表示的命名捕獲組。在 pandas 中,捕獲組的名稱將成為列的名稱,該組中捕獲的任何內(nèi)容將成為該列中的值。

現(xiàn)在將新的數(shù)據(jù)框加入到我們?cè)瓉?lái)的數(shù)據(jù)框中,完成一圈:

df = df.join(new_df)

print(df)

                                 bad_col              full_name    short_name  \

0            Lamar JacksonL. Jackson BAL          Lamar Jackson    L. Jackson   

1        Patrick Mahomes IIP. Mahomes KC     Patrick Mahomes II    P. Mahomes   

2            Dak PrescottD. Prescott DAL           Dak Prescott   D. Prescott   

3                 Josh AllenJ. Allen BUF             Josh Allen      J. Allen   

4                 Josh AllenJ. Allen SEA             Josh Allen      J. Allen   

5  Anthony McFarland Jr.A. McFarland PIT  Anthony McFarland Jr.  A. McFarland   


  team  

0  BAL  

1   KC  

2  DAL  

3  BUF  

4  SEA  

5  PIT  


查看完整回答
反對(duì) 回復(fù) 2023-08-15
?
哆啦的時(shí)光機(jī)

TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊

我的猜測(cè)是短名稱不會(huì)包含句號(hào)。因此,您可以搜索從行尾開(kāi)始的第一個(gè)句號(hào)。因此,從句號(hào)之前的一個(gè)字符到第一個(gè)空格都是您的簡(jiǎn)稱。句點(diǎn)前一個(gè)字母之前的任何內(nèi)容都將是全名。



查看完整回答
反對(duì) 回復(fù) 2023-08-15
?
喵喵時(shí)光機(jī)

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊

這可能會(huì)有所幫助。


import re


name = 'Anthony McFarland Jr.A. McFarland PIT'


short_name = re.findall(r'(\w\.\s[\w]+)\s[\w]{3}', name)[0]

full_name = name.replace(short_name, "")[:-4]

team = name[-3:]


print(short_name)

print(full_name)

print(team)

輸出:


A. McFarland

Anthony McFarland Jr.

PIT


查看完整回答
反對(duì) 回復(fù) 2023-08-15
?
泛舟湖上清波郎朗

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊

import pandas as pd

import numpy as np


df = pd.DataFrame({'players':['Lamar JacksonL. Jackson BAL', 'Patrick Mahomes IIP. Mahomes KC', 

                         'Anthony McFarland Jr.A. McFarland PIT']})


def splitName(name):

    last_period_pos = np.max(np.where(np.array(list(name)) == '.'))

    full_name = name[:(last_period_pos - 1)]

    short_name_team = name[(last_period_pos - 1):]

    team_pos = np.max(np.where(np.array(list(short_name_team)) == ' '))

    short_name = short_name_team[:team_pos]

    team = short_name_team[(team_pos + 1):]

    return full_name, short_name, team


df['full_name'], df['short_name'], df['team'] = zip(*df.players.apply(splitName))


查看完整回答
反對(duì) 回復(fù) 2023-08-15
  • 4 回答
  • 0 關(guān)注
  • 217 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)