在Pandas中分隔和堆叠列(Python 3.4)

3 投票
1 回答
675 浏览
提问于 2025-04-18 18:07

我正在尝试根据空格来分隔和解析一列中的短语。我使用的是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.repeatitertools.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

撰写回答