【问题标题】: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”列应该保持空白。

【问题讨论】:

    标签: regex python-3.x pandas dataframe split


    【解决方案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
        

        【讨论】:

          猜你喜欢
          • 2019-05-29
          • 1970-01-01
          • 2013-06-23
          • 2019-10-26
          • 1970-01-01
          • 2018-01-26
          • 2022-11-15
          • 1970-01-01
          相关资源
          最近更新 更多