Python 数据框:将列拆分为多列,右对齐不一致的单元格条目
我有一个名为“城市、州、国家”的列的熊猫数据框架。我想把这个栏目分为三个新栏目,“城市”、“州”和“国家”Python 数据框:将列拆分为多列,右对齐不一致的单元格条目,python,split,pandas,Python,Split,Pandas,我有一个名为“城市、州、国家”的列的熊猫数据框架。我想把这个栏目分为三个新栏目,“城市”、“州”和“国家” 0 HUN 1 ESP 2 GBR 3 ESP 4 FRA 5 ID, USA 6 GA, USA 7 Hoboken, NJ, USA 8 NJ, US
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
如何创建数据右对齐的新列?我是否需要遍历每一行,计算逗号的数量,并分别处理内容?我将执行以下操作:
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
我认为这可以满足你的需要,但如果你还想把事情弄得更漂亮,得到一个城市、州、国家的列顺序,你可以添加以下内容:
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
由于您正在处理字符串,我建议对您当前的代码进行修改,即
location_df = df[['City, State, Country']].apply(lambda x: pd.Series(str(x).split(',')))
我通过测试其中一个列来完成我的工作,但请尝试一下这一列。假设您将列名作为目标
谢谢这很快。请将每个列名上的“”更正为:df[['City'、'State'、'Country']]=df['target'].str.split(pat=','expand=True)