Итерация по серии для добавления символа в строку с использованием цикла while.Цикл никогда не прерывается на полных данных.Что я могу сделать? - PullRequest
0 голосов
/ 10 сентября 2018

Я создал функцию, которая перебирает столбец строк с двумя точными точными длинами. При подстановке моих данных в 100 у меня нет проблем, но когда я запускаю функцию на полных данных ~ 230K, цикл while никогда не прерывается. Ниже приведена функция:

def add_dash(df):
    n = 0
    results = []
    while n <= len(df[:-1]):
        if len(df[n]) == 7:
            results.append(df[n][:3] + '-' + df[n][3:])
            n += 1
        elif len(df[n]) == 13:
            results.append(df[n][:4] + '-' + df[n][4:6] + '-' + df[n][6:9] + '-' + df[n][9:])
            n += 1
        else:
            pass
    return(results)

Поскольку я проверил это на меньшем наборе, я не могу думать, почему цикл не закончится на большем наборе. Любое понимание будет с благодарностью!

Ответы [ 3 ]

0 голосов
/ 10 сентября 2018

вам нужно увеличивать значение 'n' в каждом цикле

так:

while n <= len(df[:-1]):
    if len(df[n]) == 7:
        results.append(df[n][:3] + '-' + df[n][3:])
    elif len(df[n]) == 13:
        results.append(df[n][:4] + '-' + df[n][4:6] + '-' + df[n][6:9] + '-' + df[n][9:])
    n += 1
return(results)
0 голосов
/ 10 сентября 2018

Попробуйте следующий код,

def add_dash(df): 
    n = 0 
    results = [] 
    while n <= len(df[:-1]): 
        if len(df[n]) == 7:       
            results.append(df[n][:3] + '-' + df[n][3:])
        elif len(df[n]) == 13:
            results.append(df[n][:4] + '-' + df[n][4:6] + '-' + df[n][6:9] + '-' + df[n][9:]) 
        else:
            results.append('')
        n+=1
    return(results)
0 голосов
/ 10 сентября 2018

Как указал @JohnGordon, если len(df[n]) не равно 7 или 13, вы никогда не обновите значение n.Чтобы это исправить:

def add_dash(df):
    n = 0
    results = []
    while n <= len(df[:-1]):
        if len(df[n]) == 7:
            results.append(df[n][:3] + '-' + df[n][3:])
            n += 1
        elif len(df[n]) == 13:
            results.append(df[n][:4] + '-' + df[n][4:6] + '-' + df[n][6:9] + '-' + df[n][9:])
            n += 1
        else:
            # Otherwise, n is always 0
            n +=1
    return(results)
...