Помогите вычислить Avg и std для файлов Excel, сохраненных как CSV - PullRequest
0 голосов
/ 23 августа 2011

У меня есть около 20 файлов Excel, сохраненных как CSV в одной папке. Каждый файл Excel имеет номера, сохраненные в первом, втором и третьем столбцах. Я пытался прочитать первый столбец для всех файлов, второй столбец для всех файлов и третий столбец для всех файлов, используя модуль CSV в Python, вычислить среднее и стандартное отклонение для каждого столбца и сохранить эти результаты в одном отдельном Excel. пожалуйста, помогите .... это то, что у меня так далеко ... как я могу получить доступ к каждому столбцу в отдельности?

import csv
import os
from numpy import array

path="A:\\hello\\folder"
dirList=os.listdir(path)
for file in dirList:
    fullpath=os.path.join(path,file)
##    print fullpath
    with open(fullpath, 'rb') as f:
        [[val for val in line.split(',')] for line in f.readlines()]
##        print line
        nums = array([line])

        for row in nums:
            print row.mean()

1 Ответ

2 голосов
/ 23 августа 2011

A понимание списка работает как обратный цикл for, который автоматически создает list для вас. Если вы вложите их с «столбцами» внутри и «строками» снаружи, вы должны получить матрицу (структура вложенного списка):

nums = [[int(val) for val in line.split(',')] for line in my_file.readlines()]

Или, может быть, если у вас есть объект для чтения csv, это может выглядеть так:

nums = [[int(val) for val in line] for line in my_csv_reader]

И теперь у вас есть матрица в переменной с именем nums благодаря вышеприведенному пониманию списка .

Тогда вам, вероятно, следует использовать numpy для вычисления вашей статистики. Это хорошо, потому что вы можете очень легко получить доступ к столбцам массива numpy, и когда вы это делаете, он возвращает столбец в форме массива numpy. у случайных массивов также есть встроенные методы для среднего и стандартного отклонения. Вы можете привести ваш nums к массиву numpy, просто передав его в функцию конструктора array():

from numpy import array
anums = array(nums)

Затем, если вы хотите перебрать столбцы, используйте нотацию среза массива и переменную shape, которая является членом каждого массива numpy:

# The 1 index of anums.shape should tell you how many columns you have
for c in range(anums.shape[1]):
    column = anums[:,c]
    col_mean = column.mean()
    col_std = column.std()
    # Do something with these variables here, probably
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...