Как добавить определенное количество символов в конец строки в Pandas?

#python #pandas #dataframe #string-length #maxlength

#python #pandas #фрейм данных #длина строки #максимальная длина

Вопрос:

Я использую библиотеку Pandas в Python и пытаюсь увеличить длину столбца с текстом, чтобы все они были одинаковой длины. Я пытаюсь сделать это, добавляя определенный символ (обычно это будет пробел, в этом примере я буду использовать «_») несколько раз, пока он не достигнет максимальной длины этого столбца.

Например:

Col1_Before

 A
B
A1R
B2
AABB4
  

Col1_After

 A____
B____
A1R__
B2___
AABB4
  

До сих пор я дошел до этого (используя приведенную выше таблицу в качестве примера). Это следующая часть (и та часть, которая это делает, на которой я застрял).

 df['Col1_Max'] = df.Col1.map(lambda x: len(x)).max()
df['Col1_Len'] = df.Col1.map(lambda x: len(x))
df['Difference_Len'] = df ['Col1_Max'] - df ['Col1_Len']
  

Возможно, я недостаточно хорошо объяснил себя, поскольку я все еще учусь. Если это сбивает с толку, дайте мне знать, и я уточню.

Ответ №1:

рассмотрим pd.Series s

 s = pd.Series(['A', 'B', 'A1R', 'B2', 'AABB4'])
  

решение
используйте str.ljust

 m = s.str.len().max()
s.str.ljust(m, '_')

0    A____
1    B____
2    A1R__
3    B2___
4    AABB4
dtype: object
  

для вашего случая

 m = df.Col1.str.len().max()
df.Col1 = df.Col1.ljust(m '_')
  

Комментарии:

1. Мне понравился этот ответ. Я никогда не рассматривал возможность использования ряда. Мне нужно запустить процесс несколько раз, что заставило меня склониться к другому решению.

2. @user3601042 в pandas каждый столбец в фрейме данных представляет собой серию. df.Col1 — это серия. Это относится к вашему вопросу, например: m = df.Col1.str.len().max() Тогда df.Col1 = df.Col1.str.ljust(m, '_') меня не волнует выбор ответа, но мне важно, чтобы вы понимали, как использовать этот ответ. Я обновлю свой пост.

3. Это имеет смысл. Ваш ответ изменил мой образ мышления. Я понял, что каждый столбец представляет собой серию. Однако никогда в контексте проблемы и как использовать это для построения решения такой проблемы (я думаю, недостаток самостоятельного обучения). Ответ помог больше, чем вы, вероятно, понимаете. Я ценю ваше время. Спасибо.

Ответ №2:

Это не самое похожее на pandas решение, но вы можете попробовать следующее:

 col = np.array(["A", "B", "A1R", "B2", "AABB4"])
data = pd.DataFrame(col, columns=["Before"])
  

Теперь вычислите максимальную длину, список отдельных длин и различия:

 max_ = data.Before.map(lambda x: len(x)).max()
lengths_ = data.Before.map(lambda x: len(x))
diffs_ = max_ - lengths_
  

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

 data["After"] = data["Before"]   ["_"*i for i in diffs_]
  

Все это дает:

   Before  After
0      A  A____
1      B  B____
2    A1R  A1R__
3  AABB4  AABB4
  

Ответ №3:

Без создания дополнительных столбцов:

 In [63]: data
Out[63]: 
    Col1
0      A
1      B
2    A1R
3     B2
4  AABB4

In [64]: max_length = data.Col1.map(len).max()

In [65]: data.Col1 = data.Col1.apply(lambda x: x   '_'*(max_length - len(x)))

In [66]: data
Out[66]: 
    Col1
0  A____
1  B____
2  A1R__
3  B2___
4  AABB4
  

Комментарии:

1. Спасибо за это. Добавил это в качестве функции для одновременного запуска в нескольких столбцах, и это сработало.