我正在尝试根据空格分隔/解析列的单元格中的短语。我在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: How do I split text in a column into multiple rows?
根据该帖子调整答案我创建了这段代码:
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
关于我做错了什么的任何建议?谢谢!
答案 0 :(得分: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