Pandas数据框:将列拆分为多列,右对齐不一致的单元格条目
我有一个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