【问题标题】:Pandas Dataframe: split column into multiple columns, right-align inconsistent cell entriesPandas Dataframe:将列拆分为多列,右对齐不一致的单元格条目
【发布时间】:2014-06-12 14:20:52
【问题描述】:

我有一个 pandas 数据框,其中有一列名为“City, State, Country”。我想将此列分成三个新列,“City”、“State”和“Country”。

0                 HUN
1                 ESP
2                 GBR
3                 ESP
4                 FRA
5             ID, USA
6             GA, USA
7    Hoboken, NJ, USA
8             NJ, USA
9                 AUS

将列拆分为三列已经很简单了:

location_df = df['City, State, Country'].apply(lambda x: pd.Series(x.split(',')))

但是,这会创建左对齐的数据:

     0       1       2
0    HUN     NaN     NaN
1    ESP     NaN     NaN
2    GBR     NaN     NaN
3    ESP     NaN     NaN
4    FRA     NaN     NaN
5    ID      USA     NaN
6    GA      USA     NaN
7    Hoboken  NJ     USA
8    NJ      USA     NaN
9    AUS     NaN     NaN

如何创建数据右对齐的新列?我需要遍历每一行,计算逗号的数量并单独处理内容吗?

【问题讨论】:

    标签: python split pandas


    【解决方案1】:

    我会做如下的事情:

    foo = lambda x: pd.Series([i for i in reversed(x.split(','))])
    rev = df['City, State, Country'].apply(foo)
    print rev
    
          0    1        2
    0   HUN  NaN      NaN
    1   ESP  NaN      NaN
    2   GBR  NaN      NaN
    3   ESP  NaN      NaN
    4   FRA  NaN      NaN
    5   USA   ID      NaN
    6   USA   GA      NaN
    7   USA   NJ  Hoboken
    8   USA   NJ      NaN
    9   AUS  NaN      NaN
    

    我认为这可以满足您的需求,但如果您还想美化事物并获得城市、州、国家列顺序,您可以添加以下内容:

    rev.rename(columns={0:'Country',1:'State',2:'City'},inplace=True)
    rev = rev[['City','State','Country']]
    print rev
    
         City State Country
    0      NaN   NaN     HUN
    1      NaN   NaN     ESP
    2      NaN   NaN     GBR
    3      NaN   NaN     ESP
    4      NaN   NaN     FRA
    5      NaN    ID     USA
    6      NaN    GA     USA
    7  Hoboken    NJ     USA
    8      NaN    NJ     USA
    9      NaN   NaN     AUS
    

    【讨论】:

      【解决方案2】:

      由于您正在处理字符串,我建议您修改当前代码,即

      location_df = df[['City, State, Country']].apply(lambda x: pd.Series(str(x).split(',')))
      

      我通过测试其中一个列让我的工作,但试试这个。

      【讨论】:

        【解决方案3】:

        假设您的列名称为 target

        df[["City", "State", "Country"]] = df["target"].str.split(pat=",", expand=True)
        

        【讨论】:

        • 谢谢。这很快。请更正每个列名称上的 '',如下所示:df[['City', 'State', 'Country']] = df['target'].str.split(pat=',',expand =真)
        猜你喜欢
        • 2016-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-16
        • 1970-01-01
        • 2018-05-28
        • 2022-12-29
        • 1970-01-01
        相关资源
        最近更新 更多