網站首頁 編程語言 正文
Pandas如何將帶有字符串元素的列拆分為多個列。
使用以下字符串的方法。
- str.split():用定界符分割
- str.extract():按正則表達式拆分
字符串方法是pandas.Series方法。
適用于pandas.Series或pandas.DataFrame列
str.split():用定界符分割
要按定界符(delimiter)進行拆分,使用字符串方法str.split()。
pandas.Series
以以下pandas.Series為例。
import pandas as pd
s_org = pd.Series(['aaa@xxx.com', 'bbb@yyy.com', 'ccc@zzz.com', 'ddd'], index=['A', 'B', 'C', 'D'])
print(s_org)
print(type(s_org))
# A ? ?aaa@xxx.com
# B ? ?bbb@yyy.com
# C ? ?ccc@zzz.com
# D ? ? ? ? ? ?ddd
# dtype: object
# <class 'pandas.core.series.Series'>
將定界符指定為第一個參數。一個pandas.Series元素作為拆分字符串的列表返回。
s = s_org.str.split('@')
print(s)
print(type(s))
# A [aaa, xxx.com]
# B [bbb, yyy.com]
# C [ccc, zzz.com]
# D [ddd]
# dtype: object
# <class 'pandas.core.series.Series'>
指定split = True作為參數可分為多個列并以pandas.DataFrame的形式獲取。默認值為expand = False。
沒有足夠的行劃分的元素為“無(None)”。
df = s_org.str.split('@', expand=True)
print(df)
print(type(df))
# 0 1
# A aaa xxx.com
# B bbb yyy.com
# C ccc zzz.com
# D ddd None
# <class 'pandas.core.frame.DataFrame'>
可以在列中指定獲取的pandas.DataFrame的列名。
df.columns = ['local', 'domain']
print(df)
# local domain
# A aaa xxx.com
# B bbb yyy.com
# C ccc zzz.com
# D ddd None
pandas.DataFrame
如果要通過將pandas.DataFrame的特定列拆分為多列來更新它,這會有些乏味。可能有更好的方法。
以先前創(chuàng)建的pandas.DataFrame為例。
print(df)
# local domain
# A aaa xxx.com
# B bbb yyy.com
# C ccc zzz.com
# D ddd None
在特定的列上使用str.split()獲得一個拆分的pandas.DataFrame。
print(df['domain'].str.split('.', expand=True))
# 0 1
# A xxx com
# B yyy com
# C zzz com
# D None None
使用pd.concat()與原始pandas.DataFrame進行串聯(lián)(聯(lián)接),并使用drop()方法刪除原始列。
df2 = pd.concat([df, df['domain'].str.split('.', expand=True)], axis=1).drop('domain', axis=1)
print(df2)
# local 0 1
# A aaa xxx com
# B bbb yyy com
# C ccc zzz com
# D ddd None None
如果剩余的列很少,則只能選擇與pd.concat()串聯(lián)(聯(lián)接)時所需的列。
df3 = pd.concat([df['local'], df['domain'].str.split('.', expand=True)], axis=1)
print(df3)
# local 0 1
# A aaa xxx com
# B bbb yyy com
# C ccc zzz com
# D ddd None None
要重命名特定的列,請使用rename()方法。
df3.rename(columns={0: 'second_LD', 1: 'TLD'}, inplace=True)
print(df3)
# local second_LD TLD
# A aaa xxx com
# B bbb yyy com
# C ccc zzz com
# D ddd None None
參考文章
Pandas.DataFrame的行名和列名的修改
str.extract():按正則表達式拆分
使用字符串方法str.extract()分割正則表達式。
以以下pandas.Series為例。
import pandas as pd
s_org = pd.Series(['aaa@xxx.com', 'bbb@yyy.com', 'ccc@zzz.com', 'ddd'], index=['A', 'B', 'C', 'D'])
print(s_org)
# A ? ?aaa@xxx.com
# B ? ?bbb@yyy.com
# C ? ?ccc@zzz.com
# D ? ? ? ? ? ?ddd
# dtype: object
在第一個參數中指定正則表達式。對于每個與正則表達式中用()括起來的組部分匹配的字符串,均對其進行劃分。
提取多個組時,無論參數expand如何,都將返回pandas.DataFrame。
如果不匹配,則為NaN。
df = s_org.str.extract('(.+)@(.+)\.(.+)', expand=True)
print(df)
# ? ? ?0 ? ?1 ? ?2
# A ?aaa ?xxx ?com
# B ?bbb ?yyy ?com
# C ?ccc ?zzz ?com
# D ?NaN ?NaN ?NaN
df = s_org.str.extract('(.+)@(.+)\.(.+)', expand=False)
print(df)
# ? ? ?0 ? ?1 ? ?2
# A ?aaa ?xxx ?com
# B ?bbb ?yyy ?com
# C ?ccc ?zzz ?com
# D ?NaN ?NaN ?NaN
如果只有一組,則當參數expand = True時返回pandas.DataFrame,如果expand = False則返回pandas.Series。
df_single = s_org.str.extract('(\w+)', expand=True)
print(df_single)
print(type(df_single))
# ? ? ?0
# A ?aaa
# B ?bbb
# C ?ccc
# D ?ddd
# <class 'pandas.core.frame.DataFrame'>
s = s_org.str.extract('(\w+)', expand=False)
print(s)
print(type(s))
# A ? ?aaa
# B ? ?bbb
# C ? ?ccc
# D ? ?ddd
# dtype: object
# <class 'pandas.core.series.Series'>
Expand = False是當前版本0.22.0中的默認值,但expand = True將是將來的默認值。
FutureWarning: currently extract(expand=None) means expand=False (return Index/Series/DataFrame)?
but in a future version of pandas this will be changed to expand=True (return DataFrame)
如果對正則表達式模式使用命名組(?P …),則該名稱將按原樣是列名。
df_name = s_org.str.extract('(?P<local>.*)@(?P<second_LD>.*)\.(?P<TLD>.*)', expand=True)
print(df_name)
# local second_LD TLD
# A aaa xxx com
# B bbb yyy com
# C ccc zzz com
# D NaN NaN NaN
如果要通過將pandas.DataFrame的特定列劃分為多個列來進行更新,請參考上面的str.split()示例。使用pd.concat()連接(聯(lián)接)原始的pandas.DataFrame并使用drop()方法刪除原始的列。
原文鏈接:https://blog.csdn.net/qq_18351157/article/details/105506107
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-02-12 asp.net 報錯 “/”應用程序中的服務器錯誤。 String or binary data w
- 2023-12-07 com.fasterxml.jackson.databind.ObjectMapper
- 2022-10-18 ASP.NET?MVC增加一條記錄同時添加N條集合屬性所對應的個體_實用技巧
- 2022-11-01 AndroidView與Compose框架交互實現介紹_Android
- 2023-06-18 Redis優(yōu)雅地實現延遲隊列的方法分享_Redis
- 2022-10-14 laravel 中關于模型查詢構造器的特殊用法
- 2022-08-10 pandas.DataFrame.from_dict直接從字典構建DataFrame的方法_pyth
- 2023-03-25 Go語言基于viper實現apollo多實例快速_Golang
- 欄目分類
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支