Подтвердить что ты не робот

Pandas Dataframe: разделите столбец на несколько столбцов, выровняйте несогласованные ячейки с выравниванием по правому краю

У меня есть фреймворк pandas с столбцом "Город, штат, страна". Я хочу разделить эту колонку на три новых столбца: "Город", "Состояние" и "Страна".

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

Как можно создать новые столбцы с выравниванием данных? Нужно ли мне перебирать каждую строку, подсчитывать количество запятых и обрабатывать содержимое отдельно?

4b9b3361

Ответ 1

Я бы сделал что-то вроде следующего:

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

Я думаю, что вы получите то, что хотите, но если вы также хотите, чтобы все было в порядке, и вы получите порядок столбцов City, State, Country, вы можете добавить следующее:

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

Ответ 2

Поскольку вы имеете дело со строками, я бы предложил поправку к вашему текущему коду i.e.

location_df = df[['City, State, Country']].apply(lambda x: pd.Series(str(x).split(',')))

Я получил свою работу, протестировав один из столбцов, но попробую попробовать.

Ответ 3

Предположим, у вас есть имя столбца в качестве цели

df[['City, State, Country']] = df['target'].str.split(pat=',',expand=True)