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
Как можно создать новые столбцы с выравниванием данных? Нужно ли мне перебирать каждую строку, подсчитывать количество запятых и обрабатывать содержимое отдельно?
Ответы
Ответ 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)