2017-01-20 10 views
4

Я ищу индивидуальную версию метода Series.str.zfill(width). Этот метод добавляет нули в строку, так что строка содержит width символов. Я ищу что-то, что делает это, но с любыми символами (или последовательностью символов), а не только с 0. Например, добавив '-' столько раз, сколько необходимо слева, чтобы строка имела width символов.форматирование специальной строки внутри серии в Pandas

ответ

3

Я думаю, что вы ищете Series.str.rjust, который принимает width и fillchar в качестве аргументов:

Заполнение левой части строки в серии/Index с дополнительным характера.

1

Вы можете определить настраиваемую функцию, например left_fill, и использовать pandas.Series.apply, чтобы сопоставить ее по всей серии.

import pandas as pd 

s = pd.Series(['foo', 'bar', 'baz', 'apple']) 

def left_fill(string, char, length): 
    while len(string) < length: 
     string = char + string 
    return string 

s.apply(left_fill, args = ('-', 5)) 

Но, как уже упоминалось в комментариях, вы лучше, используя pandas встроенный rjust метод против создания собственных! Шахта - это еще один, менее опытный пример.

+0

Действительно, мы не должны предлагать ответы 'apply', если существует векторный метод – EdChum

+0

Это просто другой способ сделать что-то - я не требовал, чтобы мой путь был более совершенным. Я не вижу никакого вреда, когда смотрю под капот и оставляю это здесь. – blacksite

+0

Для небольших наборов данных 'apply' будет быстрее, но существующий метод должен масштабироваться лучше, хотя понимание списков иногда происходит даже быстрее, просто для пользователя pandas они должны использовать только' apply', если нет другого варианта, и это довольно редкий. Это может также запутать пользователей, если они автоматически думают решить проблему с помощью 'apply', а не искать векторный метод IMO, так как я видел много кода пользователя, подобного этому, не стесняйтесь оставлять его здесь, но это только мой взглянуть на это – EdChum

Смежные вопросы