Pandas数据框:将列拆分为多列,右对齐不一致的单元格条目

63 投票
3 回答
126097 浏览
提问于 2025-04-18 04:24

我有一个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

那我该怎么做才能让新列的数据是右对齐的呢?我需要逐行处理,数一下逗号的数量,然后分别处理里面的内容吗?

3 个回答

10

因为你在处理字符串,所以我建议你对当前的代码做一些修改,也就是:

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

我通过测试其中一列让我的代码正常工作了,但你可以试试这个方法。

34

假设你有一个列的名字叫做 target

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

我会这样做:

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

撰写回答