Сдвиг значений в кадре данных python

У меня следующая проблема. Мне нужно сместить значения в кадре данных (python) влево, если некоторые ячейки пусты. Итак, если у меня есть кадр данных

  col1 col2 col3 col4
0    A         B    D
1    C    E    E    A
2    E    A    E    A
3    A         D    D
4    B    B    B    B
5    D         A    D
6    F    F         F
7    E    E    E    E
8    B    B    B    B

Я хотел бы получить фрейм данных

  col1 col2 col3 col4
0    A    B    D
1    C    E    E    A
2    E    A    E    A
3    A    D    D
4    B    B    B    B
5    D    A    D
6    F    F    F
7    E    E    E    E
8    B    B    B    B

На самом деле у меня гораздо больше столбцов, чем только 4, поэтому я надеюсь найти решение, которое не зависит от точного количества столбцов. Если кто-нибудь может дать мне ссылку, где объясняются аналогичные операции с фреймами данных, это тоже было бы неплохо. На данный момент я не очень понимаю, как организованы кадры данных Python (я пришел из мира SAS, и Python для меня довольно нов). Заранее спасибо.

РЕДАКТИРОВАТЬ: предлагаемое решение с функцией выравнивания из «Python: выравнивание массива NumPy» работает только в том случае, если ячейки содержат только один символ.


person Denis    schedule 03.01.2019    source источник
comment
тот же вопрос здесь: stackoverflow.com/questions/32062157/   -  person Clem G.    schedule 03.01.2019
comment
Спасибо, там я нашел одно рабочее решение.   -  person Denis    schedule 03.01.2019


Ответы (1)


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

df.fillna(method='bfill', axis=1)
person gold_cy    schedule 03.01.2019
comment
Спасибо, но это не работает. Возможно, потому, что содержимое клеток, кажется, отличается от нан. - person Denis; 03.01.2019
comment
вы можете заменить все экземпляры «» на np.nan, что должно позволить этому работать - person gold_cy; 03.01.2019
comment
Да, теперь это работает, но только частично. Он не сдвигает ячейки, а заменяет пустую ячейку содержимым правой ячейки. Но после этого правая ячейка не пуста. Это не то, что я ищу. - person Denis; 03.01.2019