Импортировать текстовый файл для обработки определенных столбцов


Я новичок в использовании Python. Но учитесь на практике использовать в моей обработке данных.

У меня есть большой файл данных в формате, как показано здесь.
Всегда неизвестно количество строк и столбцов. В этом примере показаны 2 последовательные строки.
1-й столбец - "время", а n-й столбец - релевантные данные, которые должны быть выбраны из идентификатора ("abc" в 1-й строке).

................
"2013-01-01 00:00:02" 228 227 15,65 15,84 14,85 14,68 14,53 13,75 12,45 12,55
"2013-01-02 00:01:03" 225 227 16,35 15,99 14,85 14,73 14,43 13,8 12,85 13,2
................

Желаемый результат как

  1. Столбец 1 = по времени, чтобы можно было рассчитать разницу во времени.
  2. столбец (n) = данные для дальнейшей обработки, должны быть в плавающем.

В моих прошлых испытаниях я попал в список, поэтому не смог преобразовать ни один из столбцов.

Я пытался искать в прошлых вопросах и ответах. Но все интерпретировать не удалось, так как я начинающий. Я рассчитываю на вашу быструю помощь, чтобы прочитать данные в виде столбца, чтобы обработать позже. Полагаю, о дальнейшей обработке можно позаботиться, поскольку это скорее математическая операция.

Я действительно благодарю вас за вашу помощь.

С уважением
Gouri

КОРРЕКЦИЯ-1:
Я понял, что pandas дает компактную версию для извлечения колонки, как мне было нужно ранее. Хорошее обучение после предложения от группы.
код выглядит следующим образом:

import pandas as pd
data = pd.read_csv(fp, sep='\t')
entry=[]
entry = data['u90']
print entry, '\n', entry[5]

out_file = open("out.txt", "w")
entry.to_csv(out_file)

С уважением
Gouri

3 ответа

Решение

Как отметил Хьюго Хонорем в комментарии, вы можете использовать панд.

Если вы не хотите вводить больше зависимостей в свой проект, вы можете использовать такую ​​функцию:

from operator import itemgetter

def load_dataset(fp, columns, types=None, delimiter=' ', skip_header=True):
    get_columns = itemgetter(*columns)
    if skip_header:
        next(fp)
    dataset = []
    for line in fp:
        parts = line.split(delimiter)
        columns = get_columns(parts)
        if types is not None:
            columns = [convertor(col) for convertor, col in zip(types, columns)]
        dataset.append(columns)
    return dataset

columns должен быть список целых чисел, types список вызываемых объектов, которые преобразуют нужные столбцы в типы, которые вы хотите, чтобы они были. Для поплавков просто пройдите float а на свидание можно было пройти обычай to_date функция.

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

import re

#l1 = ["\"2013-01-01 00:00:02\" 228 227 15.65 15.84 14.85 14.68 14.53 13.75 12.45 12.55",
#"\"2013-01-02 00:01:03\" 225 227 16.35 15.99 14.85 14.73 14.43 13.8 12.85 13.2"]

l1 = """"2013-01-01 00:00:02\" 228 227 15.65 15.84 14.85 14.68 14.53 13.75 12.45 12.55
"2013-01-02 00:01:03\" 225 227 16.35 15.99 14.85 14.73 14.43 13.8 12.85 13.2"""

l_match = re.findall(r'(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})\"\s\d+\s\d+\s\d+\.\d+\s(\d+\.\d+)',l1)

if l_match:
    for each_find in l_match:
        l_date = each_find[0]
        l_number = float(each_find[1])
        print l_date
        print l_number

Выход

2013-01-01 00:00:02
15.84
2013-01-02 00:01:03
15.99

У вас есть файл CSV с пробелами в качестве разделителя, так что вы можете использовать библиотеку CSV ( https://docs.python.org/2/library/csv.html). В противном случае, вы можете читать построчно и анализировать с split()

f = open('myfile.csv','r')
for line in f.readlines():
    date = line.split(' ')[0]
    value = line.split(' ')[N]

Где N - столбец, в котором находится ваше значение (в вашем примере 4).

Тем не менее, я настоятельно рекомендую панд, это выведет качество вашего кода на новый уровень.

Другие вопросы по тегам