2013-08-24 2 views
0

Я использую пакеты python xlrd и xlwt для чтения и записи из Excel-таблиц с использованием python. Однако я не могу понять, как написать код для решения моей проблемы.Python Подход к программированию - обработка данных в excel

Таким образом, мои данные состоят из столбца аббревиатур состояний и столбца с номерами от 1 до 7. В каждом состоянии имеется около 200-300 записей, и я хочу выяснить, сколько из них, двух, трех и т. Д. на существуют для каждого государства. Я борюсь с тем, какой метод я бы использовал, чтобы понять это.

обычно я бы опубликовал код, который у меня уже есть, но я даже не знаю с чего начать.

+0

Это, очевидно, делится на три части: (1) Прочитайте данные из файла Excel в некоторую структуру Python, как список списков. (2) Обработать данные так же, как если бы это произошло из файла CSV или кучу литералов. (3) Выведите все, что хотите вывести. На какую часть вы застряли? – abarnert

+0

Мой единственный совет - использовать «pywin32» и управлять Excel через COM. И просто делайте это, как вы делали это вручную, но с Python. –

ответ

0
  1. Подготовьте словарь, чтобы сохранить результаты.
  2. Получите номера строк с данными, которые вы используете с помощью xlrd, затем перебирайте их по каждому из них.
  3. Для каждого кода состояния, если это не in dict, вы создаете его также как dict.
  4. Затем вы проверяете, существует ли запись, которую вы читаете во втором столбце, в ключе состояния по вашим результатам dict.

    4.1 Если это не так, вы создадите его также как dict и добавьте число, найденное во втором столбце, в качестве ключа к этому dict, со значением один.

    4.2 Если это так, просто увеличьте значение для этого ключа (+1).

После того, как закончен цикл, ваш результат dict будет иметь счет для каждой отдельной записи в каждом отдельном состоянии.

0

Я собираюсь предположить, что вы уже знаете, как это сделать, и прочитайте электронную таблицу на Python в виде списка списков. Итак, у вас есть что-то вроде этого:

data = [['CA', 1], 
     ['AZ', 2], 
     ['NM', 3], 
     ['CA', 2]] 

Теперь, что вы хотите для каждого государства, для каждого номера, подсчета числа вхождений этого числа. Таким образом:

counts = {} 
for state, number in data: 
    counts.setdefault(state, collections.Counter())[number] += 1 
+0

Это прекрасно, я совершенно не знал об объекте Counter или коллекции. Counter() в этом отношении. Однако я получаю эту ошибку после добавления «импортных коллекций» и «из коллекции Import Counter»: TypeError: unhashable type: «Counter» , и мой поиск в google был неудачным ... –

+0

@ aloe-sarah: Извините, вы нужно передать ключ и значение 'setdefault', и я оставил ключ. Попробуй это сейчас. – abarnert

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