Python 我希望基于多个分隔符将数据框的文本拆分为一列,并为每个分隔符创建新行

Python 我希望基于多个分隔符将数据框的文本拆分为一列,并为每个分隔符创建新行,python,pandas,string,dataframe,Python,Pandas,String,Dataframe,大家好,下面是我的数据框: 以下是我的数据集: Name University Subject John Harvard English, French John MIT Economics Alan BU Data Science & Math 我希望得到以下输出: Name U

大家好,下面是我的数据框:

以下是我的数据集:

Name      University            Subject              

John      Harvard               English, French
John      MIT                   Economics 
Alan      BU                    Data Science & Math

我希望得到以下输出:

Name      University            Subject              

John      Harvard               English
John      Harvard               French
John      MIT                   Economics 
Alan      BU                    Data Science
Alan      BU                    Math

我尝试了以下代码:

df.drop('subject', axis=1).join(df['subject'].str.split(',', expand=True).stack().reset_index(level=1,drop=True).rename('subject'))
这是可行的,但只根据“,”进行拆分,但我也希望将其拆分为“&”

请帮帮我,我对python基本上是新手,并且愿意使用所有库,比如Pandas和NumPy

我在另一个Stackoverflow问题上找到了上述解决方案,但是,我不完全理解这些步骤。请尽可能清楚地解释这些步骤


谢谢:)

您可以使用正则表达式代替“”,“来包含要拆分的其他字符。例如:

import pandas as pd

df = pd.DataFrame({'Name':['John', 'John', 'Alan', 'Joe'], 
'University':['Harvard', 'MIT', 'BU', 'NYU'], 
'Subject':['English, French', 'Economics', 'Data Science & Math', 
'Economics and French']})

df = df.drop('Subject', axis=1).join(df['Subject'].str.split(',|&|and', expand=True).stack().reset_index(level=1,drop=True).rename('Subject'))

# remove extra white space
df['Subject'] = df['Subject'].str.strip()
df

谢谢你的回复,效果很好。另一个问题是,如果我有'and'而不是'&'。所以,这门学科应该是数据科学和数学。我尝试使用df=df.drop('Subject',axis=1)。join(df['Subject'].str.split('[,&and]',expand=True)。stack()。reset_index(level=1,drop=True)。重命名('Subject'),但这不起作用。确定。我已经更新了示例。对于正则表达式,
[,&]
会在您有其中一个字符时匹配。使用
[,&和]
将匹配
&
a
n
d
。相反,你想在单词
上进行匹配,这就是为什么你应该使用
、|&|和
,它们匹配
。Pythex.org是测试正则表达式的在线工具的url。太好了。如果解决方案令人满意,请务必接受。
   Name University       Subject
0  John    Harvard       English
0  John    Harvard        French
1  John        MIT     Economics
2  Alan         BU  Data Science
2  Alan         BU          Math
3   Joe        NYU     Economics
3   Joe        NYU        French