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?

42
demandé sur jamesbev 2014-04-27 02:49:49

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
46
répondu Karl D. 2014-04-26 23:34:03

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.

8
répondu Naufal 2017-01-27 15:59:44