亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

提取句點“.”后的文本 來自 Pandas Dataframes 列中的值

提取句點“.”后的文本 來自 Pandas Dataframes 列中的值

紫衣仙女 2023-08-08 10:35:40
我在數據框中有一列,如下所示:| Category |------------| B5050.88| 5051.90| B5050.97Q| 5051.23B| 5051.78E| B5050.11| 5051.09| Z5052我想提取句號后的文本。例如,從B5050.88開始,我只想要“88”;從5051.78E開始,我只想要“78E”;對于 Z50502,這沒什么,因為沒有句號。預期輸出:| Category | Digits |---------------------| B5050.88 | 88  || 5051.90  | 90  || B5050.97Q| 97Q || 5051.23B | 23B || 5051.78E | 78E || B5050.11 | 11  || 5051.09  | 09  || Z5052    | -   |我嘗試使用這個df['Digits'] = df.Category.str.extract('.(.*)')但我沒有得到正確的答案。使用上述內容,對于 B5050.88,我得到相同的 B5050.88;對于 5051.09,我得到 NaN。如果沒有文本,則基本上為 NaN。
查看完整描述

4 回答

?
守著一只汪

TA貢獻1872條經驗 獲得超4個贊

你可以做


splits = [str(p).split(".") for p in df["Category"]]

df["Digits"] = [p[1] if len(p)>1 else "-" for p in splits]


IE



df = pd.DataFrame({"Category":["5050.88","5051.90","B5050.97","5051.23B","5051.78E",

"B5050.11","5051.09","Z5052"]})


#df


#   Category

# 0 5050.88

# 1 5051.90

# 2 B5050.97

# 3 5051.23B

# 4 5051.78E

# 5 B5050.11

# 6 5051.09

# 7 Z5052


splits = [str(p).split(".") for p in df["Category"]]

splits


# [['5050', '88'],

 # ['5051', '90'],

 # ['B5050', '97'],

 # ['5051', '23B'],

 # ['5051', '78E'],

 # ['B5050', '11'],

 # ['5051', '09'],

 # ['Z5052']]


df["Digits"] = [p[1] if len(p)>1 else "-" for p in splits]

df


# Category  Digits

# 0 5050.88     88

# 1 5051.90     90

# 2 B5050.97    97

# 3 5051.23B    23B

# 4 5051.78E    78E

# 5 B5050.11    11

# 6 5051.09     09

# 7 Z5052        -


不太漂亮,但很有效


編輯:


添加了“-”而不是 NaN 和代碼片段


查看完整回答
反對 回復 2023-08-08
?
搖曳的薔薇

TA貢獻1793條經驗 獲得超6個贊

試試下面:

df['Category'].apply(lambda x : x.split(".")[-1] if "." in list(x) else "-")

檢查下面的代碼

https://img1.sycdn.imooc.com//64d1aa4c0001813c08960470.jpg

查看完整回答
反對 回復 2023-08-08
?
鳳凰求蠱

TA貢獻1825條經驗 獲得超4個贊

其他方式


df.Category.str.split('[\.]').str[1]


0     88

1     90

2    97Q

3    23B

4    78E

5     11

6     09

7    NaN

或者


df.Category.str.extract('((?<=[.])(\w+))')


查看完整回答
反對 回復 2023-08-08
?
LEATH

TA貢獻1936條經驗 獲得超7個贊

你需要逃避你的第一個.并做fillna:


df["Digits"] = df["Category"].astype(str).str.extract("\.(.*)").fillna("-")

print(df)

輸出:


    Category Digits

0   B5050.88     88

1    5051.90     90

2  B5050.97Q    97Q

3   5051.23B    23B

4   5051.78E    78E

5   B5050.11     11

6    5051.09     09

7      Z5052      -


查看完整回答
反對 回復 2023-08-08
  • 4 回答
  • 0 關注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號