将一串空格分隔的单词拆分为多行[重复]
Posted
技术标签:
【中文标题】将一串空格分隔的单词拆分为多行[重复]【英文标题】:Split a string of space separated words into multiple rows [duplicate] 【发布时间】:2018-06-09 15:10:39 【问题描述】:我有这个暗网数据,数据如下: origin 列一行包含多个国家。
df = pd.DataFrame('Item': ['Weapons', 'Drugs', 'Data'], 'Origin': ['US UK AUS', 'US', 'Canada'])
我正在尝试将第一行转换为多行。在这种情况下,三个!
df = pd.DataFrame('Item': ['Weapons', 'Weapons', 'Weapons','Drugs', 'Data'], 'Origin': ['US', 'UK', 'AUS', 'US', 'Canada'])
有没有我可以使用的简单代码?
如果不是这样,我怎样才能使它成为可能??
【问题讨论】:
【参考方案1】:选项 1str.extractall
-
(df.set_index('Item').Origin
.str.extractall(r'\b(?P<Origin>\w+)\b')
.reset_index()
.drop('match', 1))
Item Origin
0 Weapons US
1 Weapons UK
2 Weapons AUS
3 Drugs US
4 Data Canada
该模式将所有单词提取到单独的行中 -
\b # word boundary
(?P<Origin> # named capture group called "Origin"
\w+ # any string of letters/digits (you can change this to [^\s]+ instead to match punctuation
) # closing 1st capture group
\b # word boundary
请注意,您可以通过删除 drop
调用并将其替换为 del
调用来提高性能 -
i = (df.set_index('Item').Origin
.str.extractall(r'\b(?P<Origin>\w+)\b')
.reset_index())
del i['match']
选项 2str.split
+ stack
-
(df.set_index('Item').Origin
.str.split(expand=True)
.stack()
.reset_index(level=0, name='Origin'))
Item Origin
0 Weapons US
1 Weapons UK
2 Weapons AUS
0 Drugs US
0 Data Canada
性能
df = pd.concat([df] * 10000, ignore_index=True)
%%timeit
(df.set_index('Item').Origin
.str.extractall(r'\b(?P<Origin>\w+)\b')
.reset_index()
.drop('match', 1))
1 loop, best of 3: 226 ms per loop
%%timeit
(df.set_index('Item').Origin
.str.split(expand=True)
.stack()
.reset_index(level=0, name='Origin'))
10 loops, best of 3: 142 ms per loop
请注意,实际数据的性能可能会因数据的性质等而有所不同。
【讨论】:
以上是关于将一串空格分隔的单词拆分为多行[重复]的主要内容,如果未能解决你的问题,请参考以下文章
用空格(或任何字符)将文本单元格拆分为任意数量的单词,重复单词
2021-10-15:单词拆分。给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你