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