DataFrame de données Pandas: diviser la colonne en plusieurs colonnes, à droite-aligner les entrées de cellules incohérentes
j'ai une base de données pandas avec une colonne nommée "Ville, État, Pays". Je veux séparer cette colonne en trois colonnes, "Ville," État "et de "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 trivial:
location_df = df['City, State, Country'].apply(lambda x: pd.Series(x.split(',')))
Toutefois, cela crée aligné à gauche de données:
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 créer les nouvelles colonnes avec les données alignées à droite? Aurais-je besoin d'itérer à travers chaque ligne, compter le nombre de virgules et gérer le contenu individuellement?
2 réponses
j'aimerais faire 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 pour obtenir ce que vous voulez, mais si vous aussi vous voulez de jolies choses et obtenir un Ville, État, Pays de la colonne de commande, vous pouvez ajouter le code suivant:
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 de caractères, je suggérerais de modifier votre code actuel, c.-à-d.
location_df = df[['City, State, Country']].apply(lambda x: pd.Series(str(x).split(',')))
j'ai fait travailler le mien en testant une des colonnes mais en essayant celle-ci.