[отредактировано для ясности]
При чтении элементов из текстового файла они импортируются как строки, а не числа.Это означает, что если ваш текстовый файл имеет номер 3
и вы читаете его в Python, вам необходимо преобразовать строку в число перед выполнением арифметических операций.
Теперь у вас есть текстовый файл сcolums.Каждый столбец имеет заголовок и коллекцию элементов.Каждый элемент является либо номером, либо нет.Если это число, оно будет правильно преобразовано функцией float
, если оно не является действительным числом (то есть, если преобразование не существует), преобразование вызовет исключение, называемое ValueError
.
Таким образом, вы просматриваете свой список и элементы, как это было правильно объяснено в более чем одном ответе.Если вы можете конвертировать в float, накопите статистику.Если нет, продолжайте игнорировать эту запись.
Если вам нужна дополнительная информация о том, что такое «печать утки» (парадигма, которую можно возобновить как «лучше попросить прощения, чем разрешение»), пожалуйста, проверьте1012 * Ссылка на Википедию .Если вы попадаете на Python, вы очень часто будете слышать этот термин.
Ниже я представляю класс, который может накапливать статистику (вас интересует среднее значение).Вы можете использовать экземпляр этого класса для каждого столбца в вашей таблице.
class Accumulator(object):
"""
Used to accumulate the arithmetic mean of a stream of
numbers. This implementation does not allow to remove items
already accumulated, but it could easily be modified to do
so. also, other statistics could be accumulated.
"""
def __init__(self):
# upon initialization, the numnber of items currently
# accumulated (_n) and the total sum of the items acumulated
# (_sum) are set to zero because nothing has been accumulated
# yet.
self._n = 0
self._sum = 0.0
def add(self, item):
# the 'add' is used to add an item to this accumulator
try:
# try to convert the item to a float. If you are
# successful, add the float to the current sum and
# increase the number of accumulated items
self._sum += float(item)
self._n += 1
except ValueError:
# if you fail to convert the item to a float, simply
# ignore the exception (pass on it and do nothing)
pass
@property
def mean(self):
# the property 'mean' returns the current mean accumulated in
# the object
if self._n > 0:
# if you have more than zero items accumulated, then return
# their artithmetic average
return self._sum / self._n
else:
# if you have no items accumulated, return None (you could
# also raise an exception)
return None
# using the object:
# Create an instance of the object "Accumulator"
my_accumulator = Accumulator()
print my_accumulator.mean
# prints None because there are no items accumulated
# add one (a number)
my_accumulator.add(1)
print my_accumulator.mean
# prints 1.0
# add two (a string - it will be converted to a float)
my_accumulator.add('2')
print my_accumulator.mean
# prints 1.5
# add a 'NA' (will be ignored because it cannot be converted to float)
my_accumulator.add('NA')
print my_accumulator.mean
# prints 1.5 (notice that it ignored the 'NA')
Приветствия.