在Pandas中分隔和堆叠列(Python 3.4)
我正在尝试根据空格来分隔和解析一列中的短语。我使用的是Python 3.4中的Panda模块。举个例子,我想把这个:
Keyword Number Row
Bob Jim Jon 300 2
变成这个:
Keyword Number Row
Bob 300 2
Jim 300 2
Jon 300 2
我一直在论坛上研究如何做到这一点,偶然发现了一个非常相似的问题(而且我不能直接在上面评论来问这个问题): pandas: 我该如何将一列中的文本拆分成多行?
根据那个帖子里的回答,我写了这段代码:
import pandas as pd
xl = pd.ExcelFile("C:/Users/j/Desktop/helloworld.xlsx")
df = xl.parse("HelloWorld")
df.head()
df1 = df[['Keyword','Number','Row']]
s = df1['Keyword'].str.split(' ').apply(Series, 1).stack()
s.index = s.index.droplevel(-1)
s.name = 'Keyword'
del df1['Keyword']
y = df1.join(s)
print(y)
但是,当我尝试这样做时,我遇到了以下错误:
s = df['Keyword'].str.split(' ').apply(Series, 1).stack()
NameError: name 'Series' is not defined
有什么建议可以告诉我我哪里做错了吗?谢谢!
1 个回答
0
你可以用 apply(pd.Series)
这个方法,但这样做效率不高。把 np.repeat
和 itertools.chain
结合起来用在 pd.DataFrame
的构造函数里,会有更好的性能表现:
import numpy as np
from itertools import chain
df = pd.DataFrame([['Bob Jim Jon', 300, 2]],
columns=['Keyword', 'Number', 'Row'])
split = df['Keyword'].str.split()
n = split.map(len)
res = pd.DataFrame({'Keyword': list(chain.from_iterable(split)),
'Number': np.repeat(df['Number'], n),
'Row': np.repeat(df['Row'], n)})
print(res)
Keyword Number Row
0 Bob 300 2
0 Jim 300 2
0 Jon 300 2