Более быстрая обработка Dataframe в Pandas

99
9

Я пытаюсь обработать очень большие файлы (10 000+ наблюдений), где почтовые индексы нелегко отформатированы. Мне нужно преобразовать их все в число первых 5 цифр, и вот мой текущий код:


def makezip(frame, zipcol):
i = 0
while i < len(frame):
frame[zipcol][i] = frame[zipcol][i][:5]
i += 1
return frame

frame - это кадр данных, а zipcol - это имя столбца, содержащего почтовые индексы. Хотя это и работает, для обработки требуется очень много времени. Есть ли более быстрый способ?

спросил(а) 2021-01-25T16:27:10+03:00 4 месяца, 3 недели назад
1
Решение
124

Вы можете использовать аксессуар .str в строковых столбцах для доступа к определенным строковым методам. И на этом вы также можете нарезать:


frame[zipcol] = frame[zipcol].str[:5]

Основываясь на небольшом примере, это примерно в 50 раз быстрее, чем цикл по строкам:

In [29]: s = pd.Series(['testtest']*10000)

In [30]: %timeit s.str[:5]
100 loops, best of 3: 3.06 ms per loop

In [31]: %timeit str_loop(s)
10 loops, best of 3: 164 ms per loop


ти


In [27]: def str_loop(s):
.....: for i in range(len(s)):
.....: s[i] = s[i][:5]
.....:

ответил(а) 2021-01-25T16:27:10+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема