Принудительная установка количества столбцов при разбиении одного столбца с помощью str.split (panda) - PullRequest
0 голосов
/ 28 июня 2018

Я не знаю, возможна ли процедура с str.split. Но, например, у меня есть следующий столбец в кадре данных df:

   Column
0 a-b-c-d-e-f-g-h-i-j
1 a-a-b-b-c-c
2 a-a-b-b

Я знаю, что если я сделаю

df['Column'].str.split('-', expand=True)

тогда у меня будет такой результат:

  0  1  2  3  4      5      6      7      8      9
0 a  b  c  d  e      f      g      h      i      j
1 a  a  b  b  c      c    None   None   None   None
2 a  a  b  b  None  None  None   None   None   None

, который создает количество столбцов в зависимости от наибольшего количества элементов после разделения.

Я хочу знать, возможно ли всегда иметь 10 столбцов независимо от количества элементов, если оно находится в диапазоне от 0 до 10, и заполнить оставшиеся столбцы 'None', как здесь.

Итак, что-то, что перевернет следующий столбец:

       Column
0 a-b-c-d-e-f-g-h
1 a-a-b-b-c-c
2 a-a-b-b

в

  0  1  2  3  4      5      6      7      8      9
0 a  b  c  d  e      f      g      h    None   None
1 a  a  b  b  c      c    None   None   None   None
2 a  a  b  b  None  None  None   None   None   None

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Вы можете использовать ниже:

pd.concat([pd.DataFrame([np.nan]*10).T, pd.DataFrame(df['Column'].str.split('-').tolist())], ignore_index=True).iloc[1:]

Выход:

   0  1  2  3     4     5     6     7   8   9
1  a  b  c  d     e     f     g     h NaN NaN
2  a  a  b  b     c     c   NaN   NaN NaN NaN
3  a  a  b  b   NaN   NaN   NaN   NaN NaN NaN
0 голосов
/ 28 июня 2018

reindex потом
С улучшенной реализацией от user3483203

df.Column.str.split('-', expand=True).reindex(columns=range(10))

   0  1  2  3     4     5     6     7     8     9
0  a  b  c  d     e     f     g     h     i     j
1  a  a  b  b     c     c  None  None  None  None
2  a  a  b  b  None  None  None  None  None  None

Подход к пониманию

pd.DataFrame([
    (lambda l: l + [None] * (10 - len(l)))(x.split('-'))
    for x in df.Column
], df.index)

   0  1  2  3     4     5     6     7     8     9
0  a  b  c  d     e     f     g     h  None  None
1  a  a  b  b     c     c  None  None  None  None
2  a  a  b  b  None  None  None  None  None  None
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...