J'ai un pandas dataframe avec une colonne nommée 'Ville, État, Pays'. Je souhaite séparer cette colonne en trois nouvelles colonnes, 'Ville,' État 'et' Pays '.
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
Diviser la colonne en trois colonnes est assez simple:
location_df = df['City, State, Country'].apply(lambda x: pd.Series(x.split(',')))
Cependant, cela crée des données alignées à gauche:
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
Comment pourrait-on créer les nouvelles colonnes avec les données alignées à droite? Aurais-je besoin de parcourir chaque ligne, de compter le nombre de virgules et de gérer le contenu individuellement?
Je ferais quelque chose comme ce qui suit:
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
Je pense que cela vous donne ce que vous voulez, mais si vous voulez aussi créer de jolies choses et obtenir un ordre de colonne Ville, État, Pays, vous pouvez ajouter ce qui suit:
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
Puisque vous avez affaire à des chaînes, je suggérerais l’amendement à votre code actuel, c’est-à-dire.
location_df = df[['City, State, Country']].apply(lambda x: pd.Series(str(x).split(',')))
Le mien a été testé en testant l’une des colonnes, mais essayez celui-ci.
Supposons que le nom de la colonne soit cible
df [['' Ville, Etat, Pays '']] = df ['cible']. str.split (pat = ',', expand = True)