Контекст: у меня есть файл с ~ 44 миллионами строк. Каждый является индивидуумом с адресом в США, поэтому есть поле «Почтовый индекс». Файл является TXT, с разделителями трубы.
Из-за размера я не могу (по крайней мере на своей машине) использовать Панд для анализа. Итак, основной вопрос, который у меня есть: сколько записей (строк) для каждого отдельного почтового индекса? Я предпринял следующие шаги, но мне интересно, есть ли более быстрый и более питонский способ сделать это (кажется, что есть, я просто не знаю).
Шаг 1: Создайте набор для значений ZIP из файла:
output = set()
with open(filename) as f:
for line in f:
output.add(line.split('|')[8] # 9th item in the split string is "ZIP" value
zip_list = list(output) # List is length of 45,292
Шаг 2: Создаем список «0», такой же длины, как и первый список:
zero_zip = [0]*len(zip_list)
Шаг 3: Создаем словарь (со всеми нулями) из этих двух списков:
zip_dict = dict(zip(zip_list, zero_zip))
Шаг 4: Наконец, я снова просмотрел файл, на этот раз обновляя только что созданный dict:
with open(filename) as f:
next(f) # skip first line, which contains headers
for line in f:
zip_dict[line.split('|')[8]] +=1
Я получил конечный результат, но мне интересно, есть ли более простой способ. Спасибо всем.
2 ответа
Создание zip_dict
можно заменить на defaultdict
. Если вы можете просмотреть каждую строку в файле, вам не нужно делать это дважды, вы можете просто сохранить счетчик выполнения.
from collections import defaultdict
d = defaultdict(int)
with open(filename) as f:
for line in f:
parts = line.split('|')
d[parts[8]] += 1
Это просто, используя встроенный класс Counter.
from collections import Counter
with open(filename) as f:
c = Counter(line.split('|')[8] for line in f)
print(c)
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.