如何使用熊猫拆分数据框?

Posted

技术标签:

【中文标题】如何使用熊猫拆分数据框?【英文标题】:How to split a dataframe using pandas? 【发布时间】:2019-01-19 12:33:16 【问题描述】:

我有以下数据框要处理, 东风

Name                City
Hat, Richards       Paris
Adams               New york
Tim, Mathews        Sanfrancisco
chris, Moya De      Las Vegas
kate, Moris         Atlanta
Grisham HA          Middleton
James, Tom, greval  Rome

我预期的数据框应该如下,DF

Name         Last_name           City
Hat          Richards            Paris
             Adams               New york
Tim          Mathews             Sanfrancisco
chris        Moya De             Las Vegas
kate         Moris               Atlanta
             Grisham HA          Middleton
James, Tom   greval              Rome

应该在最后一个 ',' 上进行拆分,如果没有 ',',那么整个其他单词或短语应该落在“Last_name”列中,“Name”列应该保持空白。

【问题讨论】:

【参考方案1】:

使用str.splitradd 添加,,最后使用str.lstrip

df[['first','last']] = df['Name'].radd(', ').str.rsplit(', ', n=1, expand=True)
df['first'] = df['first'].str.lstrip(', ')
print (df)
                 Name          City       first        last
0       Hat, Richards         Paris         Hat    Richards
1               Adams      New york                   Adams
2        Tim, Mathews  Sanfrancisco         Tim     Mathews
3      chris, Moya De     Las Vegas       chris     Moya De
4         kate, Moris       Atlanta        kate       Moris
5          Grisham HA     Middleton              Grisham HA
6  James, Tom, greval          Rome  James, Tom      greval

【讨论】:

【参考方案2】:

使用str.splitn=-1(这是默认设置,您可以更改您需要的内容)

newdf=df.Name.str.split(', ',expand=True,n=1).ffill(1)
newdf.loc[newdf[0]==newdf[1],0]=''
newdf
Out[923]: 
       0          1
0    Hat   Richards
1             Adams
2    Tim    Mathews
3  chris     MoyaDe
4   kate      Moris
5         GrishamHA
df[['Name','LastName']]=newdf
df
Out[925]: 
    Name          City   LastName
0    Hat         Paris   Richards
1              Newyork      Adams
2    Tim  Sanfrancisco    Mathews
3  chris      LasVegas     MoyaDe
4   kate       Atlanta      Moris
5            Middleton  GrishamHA

【讨论】:

【参考方案3】:

又快又脏

使用pandas.str.splitstr[::-1] 颠倒顺序

df[['Last_name', 'Name']] = df.Name.str.split(', ').str[::-1].apply(pd.Series)

df

    Name          City   Last_name
0    Hat         Paris    Richards
1    NaN      New york       Adams
2    Tim  Sanfrancisco     Mathews
3  chris     Las Vegas     Moya De
4   kate       Atlanta       Moris
5    NaN     Middleton  Grisham HA

【讨论】:

以上是关于如何使用熊猫拆分数据框?的主要内容,如果未能解决你的问题,请参考以下文章

如何在熊猫数据框中拆分值并插入新行?

熊猫如何按间隔按列拆分数据帧

熊猫如何按间隔按列拆分数据帧

如何将熊猫数据框从宽形拆分为高形

根据索引的接近程度拆分熊猫数据框

字典中的字典到熊猫数据框